Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Problem mit MySQL


sPeeD2k5 - Fr 31.07.09 10:39
Titel: Problem mit MySQL
Hey

Ich benutze die Komponente direct mysql und anfangs hat auch alles hervorragend geklappt...

doch jetzt bekomm ich folgende hübsche fehlermeldung:
"[Pascal Fehler] UFunctions.pas(72): E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen"

mein code sieht wie folgt aus:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
unit UFunctions;

interface

uses
  sysutils, registry, dialogs, classes, windows,inifiles,
  umysqlvio, uMysqlCT, uMysqlClient, uMysqlHelpers ;


{$I mysqlinc.inc}

function mysql_query1(q1 : string) : string;


var


mysql_host : string;
mysql_port : integer;
mysql_user : string;
mysql_pw : string;
mysql_db : string;
FMysql: TMysqlClient;
FResult: TMysqlResult;


implementation

function mysql_query1(q1 : string) : string;
var
ok : bool;

begin
  try

    read_mysql_settings;
    fmysql := tmysqlclient.create;
    fmysql.Host := mysql_host;
    fmysql.Port := mysql_port;
    fmysql.User := mysql_user;
    fmysql.Password := mysql_pw;
    fmysql.Db := mysql_db;
    FMysql.UseNamedPipe := false;
    FMysql.UseSSL := false;
    FMysql.Compress := true;
    FMysql.TrySockets := false;
    if FMysql.Connect then
    begin
      fresult := FMysql.query(q1,false,ok);
      result := fresult.FieldValue(0);
    end;
  finally
    fmysql.Free;
  end;
end;


kann mit der Fehlermeldung leider überhaupt nichts anfangen.
Die fehlermeldung bezieht sich auf folgende Zeile:

Delphi-Quelltext
1:
fresult := FMysql.query(q1,false,ok);                    


Delete - Fr 31.07.09 10:49

Und wenn Du bool in boolean änderst?

Übrigens finde ich die Verwendung der ganzen globalen Variablen nicht so prickelnd und der try-finally-Block sieht auch etwas eigenwillig aus.


sPeeD2k5 - Fr 31.07.09 10:54

lol funktioniert....
versteh zwar den unterschied nicht aber egal ;)
was ist denn an dem try finally block auszusetzen?Oo


Delete - Fr 31.07.09 10:59

Sinnvoller wäre der Block so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
fmysql := tmysqlclient.create;
try
  //Code
finally
  fmysql.Free;
end;

Fliegst Du nämlich vorher raus, versuchst Du ein Objekt freizugeben, das noch gar nicht existiert.

Achja, und zu dem Boolean: Bool' sche Datentypen in Delphi [http://de.wikipedia.org/wiki/Borland_Delphi#Elementare_Datentypen]