| Autor |
Beitrag |
JungerIslaender
      
Beiträge: 427
Erhaltene Danke: 5
Win XP
Delphi 7; Delphi 2005
|
Verfasst: Fr 08.05.09 13:49
Hi ich habe einen Fehler in meinem programm und komm einfach nicht mehr weiter.
Hier:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm2.Button1Click(Sender: TObject); var dbname:String; begin dbname:= Edit1.text; query := 'CREATE DATABASE '+dbname; mysql_real_query(_myCon, query, Length(query)); end; |
kommt der Fehler Ikompatible Typen String und PAnsiChar. Selbst wenn dbname ein PChar ist kommt der fehler. query ist dabei ein pchar allerdings in unit1 deklariert. Acuh wenn ich dbname mit PChar() umwandle kommt der fehler.
Was nun???
Moderiert von Narses: Topic aus Sonstiges (Delphi) verschoben am Fr 08.05.2009 um 14:49
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 08.05.09 13:54
Moin!
Schau dir mal diese Komponente hier an, damit solltest du deutlich einfacher klar kommen, als mit der API direkt.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm2.Button1Click(Sender: TObject); var Query: String; begin Query := 'CREATE DATABASE '+Edit1.Text; mysql_real_query(_myCon, PChar(Query), Length(Query)); end; | So sollte das eigentlich klappen.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 08.05.09 13:54
Häh, wie in Unit1 deklariert?
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
JungerIslaender 
      
Beiträge: 427
Erhaltene Danke: 5
Win XP
Delphi 7; Delphi 2005
|
Verfasst: Fr 08.05.09 14:13
BenBE hat folgendes geschrieben : | | Häh, wie in Unit1 deklariert? |
naja im var teil von unit 1 steht im var teil folgendes:
Delphi-Quelltext
Und zu narses nein das geht nicht weil die funktion mysql_real_query halt ein pchar braucht.(ich möchte das erst noch mit der libmysql.dll versuchen) Das merkwürdige ist das query ein pchar ist das programm mir aber sagt inkompatible typen string und pchar und mit string query meint. Habe deshlab testweise eine integer variable genommen.
Das heißt delphi meint das query ein string ist obwohl es ein pchar ist und pchar<>string. Sogar wenn dbname:pchar; geht es nicht.
|
|
jaenicke
      
Beiträge: 19335
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 08.05.09 14:34
JungerIslaender hat folgendes geschrieben : | | naja im var teil von unit 1 steht im var teil folgendes: |
Du benutzt doch da nicht ernsthaft nicht nur eine globale Variable sondern auch noch eine aus einer anderen Unit?!?
Welche Fehlermeldung kommt denn bei Narses Code?
|
|
JungerIslaender 
      
Beiträge: 427
Erhaltene Danke: 5
Win XP
Delphi 7; Delphi 2005
|
Verfasst: Fr 08.05.09 14:38
jaenicke hat folgendes geschrieben : | ]Du benutzt doch da nicht ernsthaft nicht nur eine globale Variable sondern auch noch eine aus einer anderen Unit?!?  |
Doch ja, warum nicht??
[Fehler] Unit1.pas(6  : E2010 Inkompatible Typen: 'string' und 'PAnsiChar' taucht dann in jeder zeile wo mysql_real_query() steht auf.
|
|
jaenicke
      
Beiträge: 19335
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 08.05.09 14:46
Da du die aber noch einmal lokal deklariert hast, benutzt du die globale Variable ja gar nicht. Wenn trotz des Casts diese Fehlermeldung auftaucht, dann stimmt da etwas nicht... 
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 08.05.09 15:00
Moin!
JungerIslaender hat folgendes geschrieben : | | nein das geht nicht weil die funktion mysql_real_query halt ein pchar braucht. |
Was geht nicht? Du bist sicher, dass du den Code von mir verstanden hast?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
jaenicke
      
Beiträge: 19335
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 08.05.09 15:02
Mach einfach mal einen kleinen Screenie mit dem Code von Narses und dem Fehler dann...
|
|
JungerIslaender 
      
Beiträge: 427
Erhaltene Danke: 5
Win XP
Delphi 7; Delphi 2005
|
Verfasst: Fr 08.05.09 15:07
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 08.05.09 15:13
Moin!
JungerIslaender hat folgendes geschrieben : | | das hab ich gemacht(hab query halt nur in unit1) |
Was hälst du denn davon, das mal genau so zumachen, wie ich es geschrieben habe (und alle anderen Stellen zunächst mal auszukommentieren), damit zumindest klar ist, ob es so geht?
JungerIslaender hat folgendes geschrieben : | | und dann kommt über all wo ich die funktion mysql_real_query benutze der folgende fehler: [Fehler] Unit1.pas(68 ): E2010 Inkompatible Typen: 'string' und 'PAnsiChar' |
Das bezieht sich aber doch auf den restlichen Code, richtig?  Da ich/wir den nicht kennen, können wir auch schlecht was dazu sagen...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
jaenicke
      
Beiträge: 19335
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 08.05.09 15:15
Also wenn du es nicht glaubst... siehe Screenshot...
Da kommt nur eine Warnung wegen der MySQL Variable.
// EDIT:
Im restlichen Code fehlt vielleicht einfach die lokale String-Variable, kann das sein?!?
Einloggen, um Attachments anzusehen!
|
|
JungerIslaender 
      
Beiträge: 427
Erhaltene Danke: 5
Win XP
Delphi 7; Delphi 2005
|
Verfasst: Fr 08.05.09 20:50
|
|
jaenicke
      
Beiträge: 19335
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 08.05.09 20:54
Da sollte der Fehler aber in der ersten Zeile kommen...
Das müsste so richtig sein: Delphi-Quelltext 1:
| query := PChar('CREATE DATABASE '+dbname); | Allerdings sollte das mit String für query funktionieren, was kommt denn dann für ein Fehler, das war ja der Vorschlag von ganz oben...
Dass es damit geht, habe ich ja im Screenshot gezeigt.
|
|
JungerIslaender 
      
Beiträge: 427
Erhaltene Danke: 5
Win XP
Delphi 7; Delphi 2005
|
Verfasst: Fr 08.05.09 21:02
Ich seh zwar nicht wer das schon als Lösungsansatz gebracht hatte  , aber es Funtioniert^^
Also danke!!!!!
|
|
jaenicke
      
Beiträge: 19335
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 08.05.09 21:04
Die erste Antwort sollte aber genauso funktionieren und wäre eigentlich die passendere Lösung. Dass die klappt siehst du ja in meinem Screenshot.
Aber Hauptsache es klappt... 
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 08.05.09 22:38
@jaenicke: Dieser Ansatz erlaubt SQL-Injections. Bitte korrekt demonstrieren, wie Escaping funktioniert!
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Sa 09.05.09 11:17
Moin!
JungerIslaender hat folgendes geschrieben : | | Ich seh zwar nicht wer das schon als Lösungsansatz gebracht hatte |
jaenicke hat folgendes geschrieben : | | Die erste Antwort sollte aber genauso funktionieren und wäre eigentlich die passendere Lösung. |
Und vor allem ist das nicht PChar-basiert, da der Speicher an einem String-Typ hängt und so nicht die Gefahr besteht, dass man (Compiler-Magic-verwalteten) Speicher abhängt! was mir beim vermuteten Wissensstand des Threadersteller praktisch als sicher gilt
"Empirischer Programmierstil", klasse Konzept. "Funktioniert" so lange, bis du auf eine Eingabe triffst oder jemand eine Vorgehensweise anwendet, mit der du nicht gerechtest hast (oder noch schlimmer: die du gar nicht kanntest)...
Viel Erfolg noch
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|