Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   TDBXTypes.WideString-Wertetyp (https://www.delphipraxis.net/172444-tdbxtypes-widestring-wertetyp.html)

gee21 3. Jan 2013 23:50

Datenbank: MySQL • Version: 4.1 • Zugriff über: dBExpress

TDBXTypes.WideString-Wertetyp
 
Hallo alle zusammen.

Habe ein Programm das auf einen MySQL Datenbank auf einem HP Server zugreifen soll (Werte lesen und ändern).
Dank diesem Forum konnte ich nun einen Verbindung mit dem Server herstellen. (Nach einer Installation eines älteren Connectors (libmysql.dll +php_mysql)

Nun ist es aber leider so, dass ich teils Informationen aus der Datenbank abrufen kann doch bei den meisten kommt eine Fehlemeldung und bricht ab:

Auf TDBXTypes.ZSTRING-Wertetyp kann nicht als TDBXTypes.WideString-Wertetyp zugegriffen werden.

So sieht der Code aus der es verursacht:
Delphi-Quellcode:
var
  FieldNamesList: TStringList;
  SQLStmt: String;
  I: Integer;
begin
  // Eine Tabelle ist jetzt ausgewählt, daher nun die entsprechenden Steuerelemente aktivieren.
  CheckBoxActive.Enabled := True;
  ButtonApply.Enabled := True;
  TableName := ListBox1.Items[ListBox1.ItemIndex]; //Tabellennamen abrufen

  // Feldnamen (Spaltennamen) für diese Tabelle abrufen.
  FieldNamesList := TStringList.Create;
  FieldNamesList.Clear;
  SQLConnection1.GetFieldNames(TableName, FieldNamesList);

  // Select-SQL-Anweisung für alle Felder erstellen.
  if FieldNamesList.Count > 0 then
  begin
   SQLStmt := 'select ';
   for I := 0 to FieldNamesList.Count - 1 do
   begin
     SQLStmt := SQLStmt + FieldNamesList[I] + ',';
   end;
   SQLStmt[Length(SQLStmt)] := ' ';
   SQLStmt := SQLStmt + 'from '+TableName;
  end
  else
   // Feldnamen nicht gefunden, daher '*' verwenden
   SQLStmt := 'select * from '+TableName;
  FreeAndNil(FieldNamesList);

  // SQL-Anweisung zum Abrufen aller Tabellendaten erstellen.
  EditSQL.Text := SQLStmt;
  // CommandText auf SQL-Anweisung setzen.
  SQLDataSet1.CommandText := EditSQL.Text;
  if ClientDataSet1.Active then
   ClientDataSet1.Close;
  ClientDataSet1.Open;
  CheckBoxActive.Checked := True;
end;

Ich habe diesen Code von folgendem Toutorial. Da ich noch ein ziemmlicher Anfänger bin :-)

http://docwiki.embarcadero.com/RADSt..._aktualisieren




Wer kann mir helfen?

Bernhard Geyer 3. Jan 2013 23:52

AW: TDBXTypes.WideString-Wertetyp
 
Welche Delphi-Version?
Könnte mir vorstellen das die dbExpress-Version nicht mit der libmysql-DLL zusammenspielt.

Am wenigsten Probleme hat man mit den TDataset-Nachfahren von DevArt. Kosten zwar ein paar €, verhindern aber das man zu schnell graue Haare bekommt oder sie sich ausreißt :-)

gee21 4. Jan 2013 00:00

AW: TDBXTypes.WideString-Wertetyp
 
Hallo Danke für die schnelle Antwort.

Ich habe Delphi 2009 Prof. 12.0.3170.16989

Graue Haare will ich zwar nicht aber vielleicht gibt es doch eine Lösung ohne weitere Komponenten oder so? ;-)

Volker Z. 4. Jan 2013 00:07

AW: TDBXTypes.WideString-Wertetyp
 
Grüezi mitenand,

Delphi-Quellcode:
  if FieldNamesList.Count > 0 then
  begin
   SQLStmt := 'select ';
   for I := 0 to FieldNamesList.Count - 1 do
   begin
     SQLStmt := SQLStmt + FieldNamesList[I] + ','; // Kann es hier sein, dass Dein SQL-Statement select Name1, Name2, ... NameN, <- Komma beachten generiert
   end;
   SQLStmt[Length(SQLStmt)] := ' ';
   SQLStmt := SQLStmt + 'from '+TableName; // und hier // select [..], <- Komma beachten from TableName und es scheppert?
  end
Gruß

gee21 4. Jan 2013 00:13

AW: TDBXTypes.WideString-Wertetyp
 
Ja hoi

Auch noch da? :-)

Hmm das kann natürlich sein. Aber ehrlich gesagt falls dies so wäre, wie müsste man es richtig machen?:oops:

Volker Z. 4. Jan 2013 00:23

AW: TDBXTypes.WideString-Wertetyp
 
Ja noch da,

Zitat:

Hmm das kann natürlich sein. Aber ehrlich gesagt falls dies so wäre, wie müsste man es richtig machen?
Versuch mal folgendes:

Delphi-Quellcode:
var
  s : string;
begin
  if FieldNamesList.Count > 0 then
    begin
      SQLStmt := 'select ';
      for I := 0 to FieldNamesList.Count - 1 do
        if s = '' then
          s := FieldNamesList[I]
        else
          s := s + ',' + FieldNamesList[I];
      SQLStmt := SQLStmt + [B]s[/B] + ' from '+TableName;
    end
end
Gruß

gee21 4. Jan 2013 00:30

AW: TDBXTypes.WideString-Wertetyp
 
Hmm jetzt hab ich leider folgende Meldung:

You have an error in your SQL syntax; check the Manual that
corresponds to your MySQL Server Version for the right Syntax to use
near from product_related' at line 1.


:?:

gee21 4. Jan 2013 00:33

AW: TDBXTypes.WideString-Wertetyp
 
Oh ich merke gerade das die alte Meldung in den meisten Fällen auch noch kommt. Je nach Eintrag in der Datenbank kommt die eine oder andere Meldung

Volker Z. 4. Jan 2013 00:34

AW: TDBXTypes.WideString-Wertetyp
 
Hallo,

kannst Du mal das SQL postend

Gruß

gee21 4. Jan 2013 00:37

AW: TDBXTypes.WideString-Wertetyp
 
Wie meinst du das? (SQL Posten)? :oops:peinlich:oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:38 Uhr.
Seite 1 von 3  1 23      

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