Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbank: Immer neu verbinden? (https://www.delphipraxis.net/47809-datenbank-immer-neu-verbinden.html)

Pseudemys Nelsoni 16. Jun 2005 16:02

Datenbank: MySQL • Version: 4.1 • Zugriff über: libmysql.dll

Datenbank: Immer neu verbinden?
 
Moin,

würdet ihr während euer Programm läuft und ihr öfters auf eine Datenbank zugreift, mit selbiger immer wieder neu verbinden bei jeder Funktion? sowas wie das hier:

Delphi-Quellcode:
procedure irgendwas;
begin
  verbinden;
  zugreifen;
  trennen;
end;
Oder würdet ihr am Programmstart einmal verbinden und beim schliessen wieder trennen? So das man bei den funktionen nicht immer neu verbinden muss:

Delphi-Quellcode:
procedure irgendwas;
begin
  zugreifen;
end;
?

Da ich bei letzterem ja in jeder Funktion prüfen müsste ob die Verbindung überhaupt besteht und ich nicht weiss wie man das macht, hoffe ich das ihr die erste Methode als bessere bewertet <g>

alcaeus 16. Jun 2005 16:06

Re: Datenbank: Immer neu verbinden?
 
Zitat:

Zitat von Pseudemys Nelsoni
Da ich bei letzterem ja in jeder Funktion prüfen müsste ob die Verbundung überhaupt besteht und ich nicht weiss wie man das macht, hoffe ich das ihr die erste Methode als bessere bewerten würdet <g>

Dann sag ich schon aus Prinzip dass die zweite Methode die bessere ist :P
Ne, im Ernst. Manchmal dauert das Verbinden auch 1-2 Sekunden (vor allem bei Web-Datenbanken), deshalb wird die Verbindung nur einmal erstellt. Warum sollte man die Verbindung auch trennen, ich seh dafuer keinen sinnvollen Grund :gruebel:
Es ist eigentlich einfach zu pruefen, ob du verbunden bist: fuehre am Anfang einfach mysql_select_db aus, waehle eine DB an die existiert (und auf der du arbeiten willst), und wenns kracht dann brauchst du das mit dem Query gar nicht versuchen :zwinker:
Mehr Infos gibts in Luckies MySQL-Tutorial, aber das hast du bestimmt schon gelesen :zwinker:

Greetz
alcaeus

Pseudemys Nelsoni 16. Jun 2005 16:16

Re: Datenbank: Immer neu verbinden?
 
Moin alcaeus,

Ich habe schon MySQL Bücher ;)

Mein Problem ist vielmehr, das ich ja über die libmysql.dll auf die datenbank zugreife. Aber die Datenbank selbst sendet mir ja nichts an mein Programm, d.h sowas wie OnDisconnect usw gibt es nicht.
und wenn ich letztere Methode nehmen würde, dann müsste ich ja immer in jeder Funktion mit try..except arbeiten nur um eine AV zu umgehen, das kann doch nicht richtig sein oder? <g>

alcaeus 16. Jun 2005 16:21

Re: Datenbank: Immer neu verbinden?
 
Zitat:

Zitat von Pseudemys Nelsoni
und wenn ich letztere Methode nehmen würde, dann müsste ich ja immer in jeder Funktion mit try..except arbeiten nur um eine AV zu umgehen, das kann doch nicht richtig sein oder? <g>

Wie gesagt, guck dir Luckies Tutorial an, da ist z.B. sowas enthalten:
Delphi-Quellcode:
function Insert(Kontakt: TKontakt): Boolean;
var
  query       : string;
  ErrorCode   : Integer;
begin
  ErrorCode := mysql_select_db(Descriptor, DBNAME);
  if ErrorCode = 0 then
  begin
    //Hier erstellst du dein Query
    ErrorCode := mysql_real_query(Descriptor, PChar(query), length(query));
  end;
  result := ErrorCode = 0;
end;
AFAIK musst du sowieso immer mysql_select_db ausfuehren (ich kann mich aber auch irren), und du musst IMMER die Fehlerpruefung durchfuehren. Auch wenn du ein Query ausfuehrst weisst du nicht obs glatt geht, deshalb wirst du auch dort Fehler abfangen muessen :zwinker:
Was denkst du was die VCL im Hintergrund macht? Sie fuehrt etwas aus, fragt den Fehlercode ab und ist dann so lieb eine Exception zu feuern anstatt dir einfach das Abfragen des Fehlercodes zu ueberlassen. Wenn dir die manuelle Pruefung nicht gefaellt, verwende doch die Zeos-Kompos. Diese greifen auch "nur" ueber die libmyql.dll zu, aber bieten dir einiges an Komfort (z.B. Exceptions oder Parameter, damit du dir Friemeleien wie im anderen Thread ersparen kannst :zwinker:)

Greetz
alcaeus

leddl 16. Jun 2005 16:22

Re: Datenbank: Immer neu verbinden?
 
Der Don hat dir doch schon gesagt, wie du es machen kannst:
Zitat:

Zitat von Don Alcaeus
Es ist eigentlich einfach zu pruefen, ob du verbunden bist: fuehre am Anfang einfach mysql_select_db aus, waehle eine DB an die existiert (und auf der du arbeiten willst), und wenns kracht dann brauchst du das mit dem Query gar nicht versuchen

Kannst dir dafür ja zB ne Funktion "ConnectedToDB" oä schreiben, die das prüft.

Pseudemys Nelsoni 16. Jun 2005 17:14

Re: Datenbank: Immer neu verbinden?
 
hm, ich hab nur gedacht das es ne sauberere methode gibt. z.b sowa wwie "mysql_connected(FMySQL)"

alzaimar 16. Jun 2005 17:57

Re: Datenbank: Immer neu verbinden?
 
Zitat:

Zitat von alcaeus
Ne, im Ernst. Manchmal dauert ... ich seh dafuer keinen sinnvollen Grund :gruebel:

Resourcen schonen. Soll man nun Resourcen schnellstmöglich wieder freigeben, wenn sie (demnächst) nicht mehr benötigt werden? Ich würde das im Einzelfall immer abwägen. Aber das 'Im Prinzip' ist schon richtig. Und 1-2 Sekunden sind auch optimistisch. :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz