AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PAnsiChar um weiteres PAnsiChar ergänzen

Ein Thema von hedie · begonnen am 3. Feb 2016 · letzter Beitrag vom 7. Feb 2016
Antwort Antwort
Seite 1 von 2  1 2      
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#1

PAnsiChar um weiteres PAnsiChar ergänzen

  Alt 3. Feb 2016, 14:20
Hallo zusammen

Meine verwendete Funktion, mysql_real_query, erwartet als "Query" ein PAnsiChar.

Ich habe dies wie folge versucht:


Delphi-Quellcode:
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 Auskommentierten Version klappts.
Mit der jetzt aktiven kommt "Inkompatible Typen: PansiChar und string"

Macht soweit eigentlich noch ein wenig Sinn für mich.
Ändere ich wie folgt:

Query := PAnsiChar(PAnsiString('SELECT * FROM COLUMNS WHERE TABLE_SCHEMA = '''+InDatabase+''' AND TABLE_NAME = '''+ForTable+'')); Ist die Fehlermeldung weg, wobei mir MySQL meldet dass "S" keine gültige SQL Abfrage ist.
Im Query befindet sich dann nur noch das Zeichen "S" von "SELECT..."

Kann mir jemand Helfen?
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

AW: PAnsiChar um weiteres PAnsiChar ergänzen

  Alt 3. Feb 2016, 14:26
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;

Geändert von nahpets ( 3. Feb 2016 um 14:31 Uhr) Grund: Format-Anweisung eingefügt
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#3

AW: PAnsiChar um weiteres PAnsiChar ergänzen

  Alt 3. Feb 2016, 14:26
Hinter das Fortable müssen 4 Gänsefüßchen!


+ForTable+'''';
Ralph
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#4

AW: PAnsiChar um weiteres PAnsiChar ergänzen

  Alt 3. Feb 2016, 14:31
Keine Ahnung, ob ich jetzt eventuell auf 'nem total falschen Dampfer unterwegs bin. Hätte es so gemacht:
Delphi-Quellcode:
unction 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''';

    mysql_real_query(dbCon,PAnsiChar(Query),Length(Query));
end;
Danke für den Vorschlag.
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
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: PAnsiChar um weiteres PAnsiChar ergänzen

  Alt 3. Feb 2016, 14:46
Das Ende muss so aussehen:

...+ForTable+'''';

Edit: Sorry ich hab scheinbar nur 10% des Threads gelesen
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#6

AW: PAnsiChar um weiteres PAnsiChar ergänzen

  Alt 3. Feb 2016, 15:51
Delphi 2009 oder neuer? (ich wette mal)
[EDIT] Jupp

Zitat:
Kommt leider weiterhin die Meldung dass "S" keine gültige Syntax sei.
Delphi-Quellcode:
var
  Query: String;
Und ich wette, daß der Compiler eine WARNUNG ausgibt, vonwegen String UnicodeString und PAnsiChar.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: PAnsiChar um weiteres PAnsiChar ergänzen

  Alt 3. Feb 2016, 16:02
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
Heiko
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#8

AW: PAnsiChar um weiteres PAnsiChar ergänzen

  Alt 4. Feb 2016, 18:44
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.
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
hedie

Registriert seit: 12. Dez 2005
Ort: Schweiz
1.024 Beiträge
 
Delphi XE6 Starter
 
#9

AW: PAnsiChar um weiteres PAnsiChar ergänzen

  Alt 4. Feb 2016, 19:31
hab die Lösung:

PAnsiChar(AnsiString(stringVar)); Das ist alles!

Ergebnis:

Delphi-Quellcode:
var
  Query:PAnsiChar;
begin
...
  Query := PAnsiChar(AnsiString('SELECT * FROM COLUMNS WHERE TABLE_SCHEMA = '''+InDatabase+''' AND TABLE_NAME = '''+ForTable+''''));
Claudio
Tu was du nicht lassen kannst
- http://endasmedia.ch
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#10

AW: PAnsiChar um weiteres PAnsiChar ergänzen

  Alt 7. Feb 2016, 16:20
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 ...'''+InDatabase+'''... verwenden sollte.

Quasi so in etwa ...'+mysql_quote_name(InDatabase)+'... .
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 7. Feb 2016 um 16:23 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:26 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