Jepp, das meinte ich. Den Ansatz habe ich nur noch nicht weiterverfolgt weil mir nicht klar ist, ob dann die ganze Zeit die ganze Lib im Speicher rumhängt. Bei
mysql.pas ist es ja so, dass er nur die Funktionen lädt, die auch benötigt werden.
Nee, es wird die komplette
DLL/EXE in den
RAM gemappt (wie bei den MMFs / Memory Mapped Files, wobei Windows auch "ungenutzte" Teile auslagern kann)
GetProAdress liefert nur die Eintrittsadresse der gewünschten Funktion ... ob man sich nun diese Adresse holt oder nicht ist egal, der Code ist so oder so in den Arbeitsspeicher gemappt.
Dein MysqlVarArray ist also unnötig. (ich denke mal, du wolltes darüber sorgen, daß die Funktionen wieder entladen werden, wenn nicht mehr benötigt)
Mit TMyBinding und TMyStatement habe ich bis jetzt noch nichts gemacht. Wozu ist das? Stored Procedures?
diese Prepared Statements hatte ich auch grade erst kennengelernt.
(über's mysqli vom PHP ... so oft nutze ich DBs noch garnicht, drum wollte ich mir es so ähnlich wie in PHP einrichten. Und darum macht sich
MySQL auch gut, weil ich dann ja nur Einwas lernen muß
)
Delphi-Quellcode:
mysqli.query('INSERT INTO test VALUES (''' + mysql_real_escape(param1)
+ ''', ''' + mysql_real_escape(param2) + ''')');
Delphi-Quellcode:
stmt = mysqli.prepare('INSERT INTO test VALUES (?, ?)');
stmt.bind_params(param1, param2);
es geht darum, daß man Variablen an Parameter/Results binden kann
hier mal Anhand deines Beispieles:
Delphi-Quellcode:
var
Name:
String;
Number, X: Integer;
X := 5;
// hab das X nur als Beispiel für einen "prepared" Parameter eingefügt
sqlClient := TMysqlClient.Create('
DB', '
User', '
Passwort', '
Host', 3306, true);
if Assigned(sqlClient)
then
begin
sqlStmt := sqlClient.prepare('
SELECT Name, Number FROM TEST
WHERE X > ?');
sqlStmt.bind_param(X);
sqlStmt.bind_result(
Name);
sqlStmt.bind_result(Number);
if sqlStmt.execute
then
begin
sqlStmt.First;
repeat
sName :=
Name;
iNumber := Number;
until not sqlStmt.Next;
sqlStmt.Free;
end;
sqlClient.Free;
// das disconnect könnte man im Free mit unterbringen
end;
http://php.net/manual/de/pdo.prepared-statements.php
.Create
+
if Assigned(sqlClient) then
läßt sich über einen speziellen/eigenen Constructor erreichen.