![]() |
PAnsiChar um weiteres PAnsiChar ergänzen
Hallo zusammen
Meine verwendete Funktion, mysql_real_query, erwartet als "Query" ein PAnsiChar. Ich habe dies wie folge versucht:
Delphi-Quellcode:
Mit der Auskommentierten Version klappts.
function GetColumnCount(ForTable: PAnsiChar; InDatabase: PAnsiChar):integer;
var Query:PAnsiChar; begin Query := 'SELECT * FROM COLUMNS WHERE TABLE_SCHEMA = '''+InDatabase+''' AND TABLE_NAME = '''+ForTable+''; //Query := 'SELECT * FROM COLUMNS WHERE TABLE_SCHEMA = ''mydata'' AND TABLE_NAME = ''mytable'''; mysql_real_query(dbCon,Query,Length(Query)); end; Mit der jetzt aktiven kommt "Inkompatible Typen: PansiChar und string" Macht soweit eigentlich noch ein wenig Sinn für mich. Ändere ich wie folgt:
Delphi-Quellcode:
Ist die Fehlermeldung weg, wobei mir MySQL meldet dass "S" keine gültige SQL Abfrage ist.
Query := PAnsiChar(PAnsiString('SELECT * FROM COLUMNS WHERE TABLE_SCHEMA = '''+InDatabase+''' AND TABLE_NAME = '''+ForTable+''));
Im Query befindet sich dann nur noch das Zeichen "S" von "SELECT..." Kann mir jemand Helfen? |
AW: PAnsiChar um weiteres PAnsiChar ergänzen
Keine Ahnung, ob ich jetzt eventuell auf 'nem total falschen Dampfer unterwegs bin. Hätte es so gemacht:
Delphi-Quellcode:
function GetColumnCount(ForTable: PAnsiChar; InDatabase: PAnsiChar):integer;
var Query: String; begin Query := 'SELECT * FROM COLUMNS WHERE TABLE_SCHEMA = '''+InDatabase+''' AND TABLE_NAME = '''+ForTable+''; //Query := 'SELECT * FROM COLUMNS WHERE TABLE_SCHEMA = ''mydata'' AND TABLE_NAME = ''mytable'''; // Damit es keine Hochkomma(verzähl)orgien gibt: Query := Format('SELECT * FROM COLUMNS WHERE TABLE_SCHEMA = %s AND TABLE_NAME = %s', [QuotedStr(InDatabase),QuotedStr(ForTable)]); mysql_real_query(dbCon,PAnsiChar(Query),Length(Query)); end; |
AW: PAnsiChar um weiteres PAnsiChar ergänzen
Hinter das Fortable müssen 4 Gänsefüßchen!
+ForTable+''''; |
AW: PAnsiChar um weiteres PAnsiChar ergänzen
Zitat:
Kommt leider weiterhin die Meldung dass "S" keine gültige Syntax sei. mit dem Auskommentierten Query funktioniert es einwandfrei. Danke, es mussten tatsächlich vier gänsefüsschen hinten dran :) :thumb: |
AW: PAnsiChar um weiteres PAnsiChar ergänzen
Das Ende muss so aussehen:
Delphi-Quellcode:
...+ForTable+'''';
Edit: Sorry ich hab scheinbar nur 10% des Threads gelesen :roll: |
AW: PAnsiChar um weiteres PAnsiChar ergänzen
Delphi 2009 oder neuer? (ich wette mal)
[EDIT] Jupp Zitat:
|
AW: PAnsiChar um weiteres PAnsiChar ergänzen
Hallo,
PChars werden per StrCopy verkettet. Aber ich würde auf jeden Fall auf String umstellen, in diesem Fall aber auf AnsiString (Query: AnsiString). Heiko |
AW: PAnsiChar um weiteres PAnsiChar ergänzen
Danke für eure Antworten.
Ein umstellen auf String ist nicht ganz so trivial. Ich verwende die MySQL.pas unit welche mit der limysql.dll spricht. Einer von vielen Abschnitten sieht wie folgt aus:
Delphi-Quellcode:
var
_mysql_real_query: function (_mysql: PMYSQL; q: PAnsiChar; length: longword): longint; stdcall; function mysql_real_query(_mysql: PMYSQL; q: PAnsiChar; length: longword): longint; begin if @_mysql_real_query=nil then LoadProcAddress(@_mysql_real_query, 'mysql_real_query'); Result := _mysql_real_query(_mysql, q, length); end; Offensichtlich, erwartet die DLL hier ein PAnsiChar. So wie es aussieht, bleibt mir der Weg über StrCpy nicht erspart. |
AW: PAnsiChar um weiteres PAnsiChar ergänzen
hab die Lösung:
Delphi-Quellcode:
Das ist alles!
PAnsiChar(AnsiString(stringVar));
Ergebnis:
Delphi-Quellcode:
var
Query:PAnsiChar; begin ... Query := PAnsiChar(AnsiString('SELECT * FROM COLUMNS WHERE TABLE_SCHEMA = '''+InDatabase+''' AND TABLE_NAME = '''+ForTable+'''')); |
AW: PAnsiChar um weiteres PAnsiChar ergänzen
Ich würde eher empfehlen das in UTF-8 zu konvertieren, anstatt nach ANSI.
Natürlich vorher die Connection auch auf UTF-8 eintellen. Und es gibt garantiert eine "Quote"-Funktion, welche man statt
Delphi-Quellcode:
verwenden sollte.
...'''+InDatabase+'''...
Quasi so in etwa
Delphi-Quellcode:
.
...'+mysql_quote_name(InDatabase)+'...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:40 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