Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Mysql und D2009 - connection funktioniert nicht (https://www.delphipraxis.net/126900-mysql-und-d2009-connection-funktioniert-nicht.html)

emsländer 4. Jan 2009 13:13

Datenbank: MYSQL • Version: 5.x • Zugriff über: mysql

Mysql und D2009 - connection funktioniert nicht
 
Salvete,

doch noch ein dicker Hund!

ob
Delphi-Quellcode:
mysql_real_connect(_myCon, pchar(mysqlip), pchar(MySQLuser), pchar(MySQLpass), pchar(MySQLdb), mysqlport, nil, 0)
oder
Delphi-Quellcode:
mysql_real_connect(_myCon, PwideChar(mysqlip), PwideChar(MySQLuser), PwideChar(MySQLpass), PwideChar(MySQLdb), mysqlport, nil, 0)
gibt NIL zurück und als error nur wirre Hyroglyphen.

Hat jemand einen Lösungsvorschlag?

Gruss

EL

DeddyH 4. Jan 2009 13:15

Re: Mysql und D2009 - connection funktioniert nicht
 
Wieso PWideChar und nicht PAnsiChar?

mkinzler 4. Jan 2009 13:20

Re: Mysql und D2009 - connection funktioniert nicht
 
Ist ja 2mal das Gleiche Pcahr entspricht PWideChar unter D2009

emsländer 4. Jan 2009 13:24

Re: Mysql und D2009 - connection funktioniert nicht
 
Zitat:

Zitat von DeddyH
Wieso PWideChar und nicht PAnsiChar?

Auch probiert - geht nicht => kommen ebenfalls nur Hyroglyphen zurück

Gruss

EL

mkinzler 4. Jan 2009 13:35

Re: Mysql und D2009 - connection funktioniert nicht
 
Hat dann aber nichts mit dem Verbindungsaufbau zu tun

emsländer 4. Jan 2009 13:38

Re: Mysql und D2009 - connection funktioniert nicht
 
Zitat:

Zitat von mkinzler
Hat dann aber nichts mit dem Verbindungsaufbau zu tun

ne - mit der Art der Parameterübermittlung. Zurück liefert der zunächst NIL und die Fehlerbeschreibung liefert Hyroglyphen. Das zeugt von falschen Pointern.

Gruss

EL

emsländer 4. Jan 2009 13:59

Re: Mysql und D2009 - connection funktioniert nicht
 
Salvete,

ich bin da wohl nicht er Einzigste mit diesem Problem:

http://forum.delphi-treff.de/showthr...722#post183722


irgendwas ist an der Parameterübermittlung zu mysql.pas nun anders.

In irgendeinem forum (http://www.elitesecurity.org/t279776...nicode-podrska) steht was von UTF-8?

Ich habe da ein echtes Problem!

Gruss

EL

emsländer 4. Jan 2009 15:22

Re: Mysql und D2009 - connection funktioniert nicht
 
Hier mal ein Link zu dem C-Quellcode. => http://dev.mysql.com/sources/doxygen...8c-source.html


Vielleicht können die richtigen Cracks hier damit was anfangen?

Dieser Fehler hat irgendwas mit den neuen Datenstrukturen bei Delphi, was Ansi etc. betrifft zu tun.

Gruss

EL

mkinzler 4. Jan 2009 15:25

Re: Mysql und D2009 - connection funktioniert nicht
 
Delphi verwendet wie Windows UTF-16 für Unicod, MySQL UTF-8. Hierbei sind die Zeichen variable breit, bei UTF-16 immer 16Bit

emsländer 4. Jan 2009 15:35

Re: Mysql und D2009 - connection funktioniert nicht
 
Zitat:

Zitat von mkinzler
Delphi verwendet wie Windows UTF-16 für Unicod, MySQL UTF-8. Hierbei sind die Zeichen variable breit, bei UTF-16 immer 16Bit

Wie kann ich das also wandeln?

Gruss

EL

mkinzler 4. Jan 2009 15:41

Re: Mysql und D2009 - connection funktioniert nicht
 
utf8encode() sollte dir helfen

emsländer 4. Jan 2009 15:47

Re: Mysql und D2009 - connection funktioniert nicht
 
Zitat:

Zitat von mkinzler
utf8encode() sollte dir helfen

Die Frage ist: wo packe ich das rein?

in die mysql.pas oder vorher wo ich den Aufruf in die MYSQL.PAS mache?

Gruss

EL

mkinzler 4. Jan 2009 15:49

Re: Mysql und D2009 - connection funktioniert nicht
 
Versuch es mal im Aufruf

emsländer 4. Jan 2009 16:08

Re: Mysql und D2009 - connection funktioniert nicht
 
Zitat:

Zitat von mkinzler
Versuch es mal im Aufruf

Hi mkinzler,

das scheint zu klappen! Zuminstens schon einmal im Connect.

Vielen Dank für die Hilfe

Jetzt darf ich ne RiesenApp durchgehen um alles durchzuforsten *iggitt*

Gruss

EL

emsländer 4. Jan 2009 16:45

Re: Mysql und D2009 - connection funktioniert nicht
 
Zu früh gefreut :pale:

die Aufrufe mysql_query und mysql_store_result funktionieren so zumindest einmal nicht.... so ein Dreck
Ich hab schon alle möglichen und unmöglichen Kombinationen durch.

Korrektur:

Ich komme der Sache näher.

var sstring : rawbytestring;

begin ....

mysql_query(_dbserver, pchar(sstring));

Gruss

EL

mjustin 4. Jan 2009 16:53

Re: Mysql und D2009 - connection funktioniert nicht
 
Zitat:

Zitat von mkinzler
Delphi verwendet wie Windows UTF-16 für Unicod, MySQL UTF-8. Hierbei sind die Zeichen variable breit, bei UTF-16 immer 16Bit

Fix 16 Bit wäre UCS-2, UTF-16 verwendet für die Kodierung eines Unicodezeichens 16 oder 32 Bit und kann daher mehr Zeichen darstellen: http://de.wikipedia.org/wiki/Utf-16

emsländer 4. Jan 2009 17:20

Re: Mysql und D2009 - connection funktioniert nicht
 
Jetzt habe ich den Kasten soweit, das er zumindest mal SQL-Kommandos akzeptiert und ich das durch z.B. reccount nachvollziehen kann.
Allerdings gibt er mir bei der Ausgabe von Datenfeldern nur Blödsinn raus.


Delphi-Quellcode:
      if reccount <> 0 then begin
        such_bar.Max := reccount;
        such_bar.Refresh;
        showbutton(inttostr(reccount)+' Treffer');
        for i := 0 to RecCount -1 do begin             => bis hierhin kann ich es nachvollziehen und es stimmt
          such_bar.StepIt;
          such_bar.Refresh;
          _myRow := mysql_fetch_row(_MyRes);           => hier muss der Fehler passieren.
          ausgabeliste.addrow();
          ausgabeliste.cells[0,i] := _MyRow[0]; //Datensatz-ID
          ausgabeliste.cell[1,i].AsString := _MyRow[1]; // Anlagedatum
          ausgabeliste.cells[2,i] := _myrow[2]; // Vermittler
          ausgabeliste.cells[3,i] := get_vermittler(_myrow[2]); // Vermittler
Gruss

EL

mkinzler 4. Jan 2009 17:22

Re: Mysql und D2009 - connection funktioniert nicht
 
Was für Datenfelder?

emsländer 4. Jan 2009 17:24

Re: Mysql und D2009 - connection funktioniert nicht
 
Zitat:

Zitat von mkinzler
Was für Datenfelder?

Das erste ist ein Integer, die anderen varchar.

Gruss

EL

mkinzler 4. Jan 2009 17:28

Re: Mysql und D2009 - connection funktioniert nicht
 
Integer hat ja eigentlich nichts mit Unicode zu tun :gruebel:
Zeig mal den Code zum kompletten Vorgang

emsländer 4. Jan 2009 17:32

Re: Mysql und D2009 - connection funktioniert nicht
 
Zitat:

Zitat von mkinzler
Integer hat ja eigentlich nichts mit Unicode zu tun :gruebel:
Zeig mal den Code zum kompletten Vorgang

inhalt von sstring bei Übergabe: 'select lfdnr, Anlagedatum, vermittler, mitarbeiter, Dossier, Name, Vorname, Bank, Darlehensnummer, PLZ_Objekt, ORT_Objekt, PLZ, Ort, fremdmittelinclkosten, endpreis FROM akten WHERE Akte_abgelegt="N" and geloescht ="N" and neuer_Antrag =0 order by lfdnr desc'

Delphi-Quellcode:
function TAktenManager.fillgrid(sstring : string; neu : boolean) : boolean;
  var
    _myRes: PMySQL_Res; //hier wird der gesamte Ergebnissatz gespeichert
    _myRow: PMySQL_Row; //enthält den aktuellen Datensatz
    reccount,i : integer;
    _fremdmittel, _endpreis : integer;
    _string : rawbytestring;
begin
  _fremdmittel := 0;
  _endpreis := 0;
  v_last_query := sstring;
  edt_sql_suchkommando.Text := sstring;
  result := true;
  AntiFreeze.Active := true;
  ausgabeliste.Visible := false;
//  such_alarm.visible := true;
  such_bar.Visible := true;
  _string := utf8encode(sstring);
  try
    db_label.caption := 'Datenbankzugriff';
    db_label.Repaint;
    mysql_query(v_fddcon, pchar(_string));
    db_label.caption := 'Datenauswertung';
    db_label.Repaint;
    _myRes := mysql_store_result(v_fddcon);
    db_label.caption := 'Daten einlesen';
    db_label.Repaint;
    ausgabeliste.ClearRows;
    if _myRes <> nil then begin
      reccount := mysql_num_rows(_myRes);
      if reccount <> 0 then begin
        such_bar.Max := reccount;
        such_bar.Refresh;
        showbutton(inttostr(reccount)+' Treffer');
        for i := 0 to RecCount -1 do begin
          such_bar.StepIt;
          such_bar.Refresh;
          _myRow := mysql_fetch_row(_MyRes);
          ausgabeliste.addrow();
          ausgabeliste.cells[0,i] := _MyRow[0]; //Datensatz-ID
          ausgabeliste.cell[1,i].AsString := _MyRow[1]; // Anlagedatum
          ausgabeliste.cells[2,i] := _myrow[2]; // Vermittler
          ausgabeliste.cells[3,i] := get_vermittler(_myrow[2]); // Vermittler
          ausgabeliste.cells[4,i] := _myrow[3]; // Mitarbeiter
          ausgabeliste.cells[5,i] := _myrow[4]; // Dossier
          ausgabeliste.cells[6,i] := _myrow[5]; // Name
          ausgabeliste.cells[7,i] := _myrow[6]; // Vorname
          ausgabeliste.cells[8,i] := _myrow[7]; // Bank
          ausgabeliste.cells[9,i] := _myrow[8]; // Darlehensnummer
          ausgabeliste.cells[10,i] := _myrow[9]; // PLZ_Objekt
          ausgabeliste.cells[11,i] := _myrow[10]; // ORT_Objekt
          ausgabeliste.cells[12,i] := _myrow[11]; // PLZ
          ausgabeliste.cells[13,i] := _myrow[12]; // Ort
          ausgabeliste.cells[14,i] := _myrow[13]; // fremdmittelinclkosten
          ausgabeliste.cells[15,i] := _myrow[14]; // endpreis
          _fremdmittel := _fremdmittel + strtoint(_myrow[13]);
          _endpreis := _endpreis + strtoint(_myrow[14]);
        end;
      end else such_meldung.caption := 'Keine Datensätze gefunden!';
      mysql_free_result(_myRes);            //Ergebniss
    end else such_meldung.caption := 'Fehler beim Datenzugriff! SQL-Fehlermeldung: ' + mysql_error(v_fddcon);
  except
  end;
  edt_fremdmittel.Value := _fremdmittel;
  edt_endsumme.Value := _endpreis;
  such_bar.Visible := false;
  AntiFreeze.Active := false;
  ausgabeliste.Visible := true;
  db_label.caption := 'Datenbank online';
  db_label.Repaint;
end;
Gruss

EL

mkinzler 4. Jan 2009 17:46

Re: Mysql und D2009 - connection funktioniert nicht
 
Die Felder werden auch UTF8 sein.
Versuch es mal mit Utf8decode()

emsländer 4. Jan 2009 17:52

Re: Mysql und D2009 - connection funktioniert nicht
 
Zitat:

Zitat von mkinzler
Die Felder werden auch UTF8 sein.
Versuch es mal mit Utf8decode()

leider nope :pale: auf dem Trip war ich auch schon vergebens


Gruss

EL

emsländer 4. Jan 2009 18:08

Re: Mysql und D2009 - connection funktioniert nicht
 
Die Ergebnisse sollen Pchar (also Zeiger) sein. Wie komm ich denn da dran, wenn nicht so wie bisher?

Gruss

EL

DeddyH 4. Jan 2009 18:12

Re: Mysql und D2009 - connection funktioniert nicht
 
Unter Delphi bis einschließlich 2007 waren PChars gleichbedeutend mit PAnsiChars. Seit Delphi 2009 sind das aber PWideChars (äquivalent gilt das auch für Chars und Strings). Wenn Du also Units verwendest, die unter einem Delphi < 2009 geschrieben wurden, musst Du PChar durch PAnsiChar usw. ersetzen, dann hast Du evtl. eine Chance, das alte Verhalten wiederherzustellen.

emsländer 4. Jan 2009 19:36

Re: Mysql und D2009 - connection funktioniert nicht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von DeddyH
Unter Delphi bis einschließlich 2007 waren PChars gleichbedeutend mit PAnsiChars. Seit Delphi 2009 sind das aber PWideChars (äquivalent gilt das auch für Chars und Strings). Wenn Du also Units verwendest, die unter einem Delphi < 2009 geschrieben wurden, musst Du PChar durch PAnsiChar usw. ersetzen, dann hast Du evtl. eine Chance, das alte Verhalten wiederherzustellen.

Genau das habe ich getan und anbei das Ergebnis zum Einpflegen in die Codelib


Somit funktioniert alles wieder (mit ein paar Änderungen) :hello:

Falls da noch Fehler auftauchen, bitte Bescheid geben.

Gruss

EL


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:00 Uhr.

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