Autor Beitrag
JungerIslaender
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 427
Erhaltene Danke: 5

Win XP
Delphi 7; Delphi 2005
BeitragVerfasst: Fr 08.05.09 13:49 
Hi ich habe einen Fehler in meinem programm und komm einfach nicht mehr weiter.
Hier:
ausblenden 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 user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Fr 08.05.2009 um 14:49
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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. :idea: ;)

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 427
Erhaltene Danke: 5

Win XP
Delphi 7; Delphi 2005
BeitragVerfasst: Fr 08.05.09 14:13 
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
Häh, wie in Unit1 deklariert?

naja im var teil von unit 1 steht im var teil folgendes:

ausblenden Delphi-Quelltext
1:
 var query: PChar;					


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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19335
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 08.05.09 14:34 
user profile iconJungerIslaender hat folgendes geschrieben Zum zitierten Posting springen:
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?!? :shock:

Welche Fehlermeldung kommt denn bei user profile iconNarses Code?
JungerIslaender Threadstarter
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 427
Erhaltene Danke: 5

Win XP
Delphi 7; Delphi 2005
BeitragVerfasst: Fr 08.05.09 14:38 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
]Du benutzt doch da nicht ernsthaft nicht nur eine globale Variable sondern auch noch eine aus einer anderen Unit?!? :shock:
Doch ja, warum nicht??

[Fehler] Unit1.pas(68): E2010 Inkompatible Typen: 'string' und 'PAnsiChar' taucht dann in jeder zeile wo mysql_real_query() steht auf.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19335
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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... :gruebel:
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 08.05.09 15:00 
Moin!

user profile iconJungerIslaender hat folgendes geschrieben Zum zitierten Posting springen:
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? :gruebel:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19335
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 08.05.09 15:02 
Mach einfach mal einen kleinen Screenie mit dem Code von user profile iconNarses und dem Fehler dann...
JungerIslaender Threadstarter
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 427
Erhaltene Danke: 5

Win XP
Delphi 7; Delphi 2005
BeitragVerfasst: Fr 08.05.09 15:07 
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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;

das hab ich gemacht(hab query halt nur in unit1) 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'

Moderiert von user profile iconNarses: Zitat repariert
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 08.05.09 15:13 
Moin!

user profile iconJungerIslaender hat folgendes geschrieben Zum zitierten Posting springen:
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? :nixweiss:

user profile iconJungerIslaender hat folgendes geschrieben Zum zitierten Posting springen:
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? :gruebel: Da ich/wir den nicht kennen, können wir auch schlecht was dazu sagen... :roll:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19335
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 427
Erhaltene Danke: 5

Win XP
Delphi 7; Delphi 2005
BeitragVerfasst: Fr 08.05.09 20:50 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm2.Button1Click(Sender: TObject);
var dbname:PChar; query:PChar; _mycon: PMySQL;
begin
  query := 'CREATE DATABASE '+dbname;
  mysql_real_query(_myCon, query, Length(query));
end;


ausblenden Quelltext
1:
[Fehler] Unit2.pas(31): E2010 Inkompatible Typen: 'string' und 'PAnsiChar'					


Hab alles andere ausgeklammert.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm2.Button1Click(Sender: TObject);
var dbname:PChar; query:PChar; _mycon: PMySQL;
begin
  query := 'CREATE DATABASE Testdatenbank';
  mysql_real_query(_myCon, query, Length(query));
end;

Das hingegen funktioniert, ich möchte den namen der db aber über ein editfeld realisieren.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19335
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 08.05.09 20:54 
Da sollte der Fehler aber in der ersten Zeile kommen... :autsch:
Das müsste so richtig sein:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 427
Erhaltene Danke: 5

Win XP
Delphi 7; Delphi 2005
BeitragVerfasst: Fr 08.05.09 21:02 
Ich seh zwar nicht wer das schon als Lösungsansatz gebracht hatte :D, aber es Funtioniert^^

Also danke!!!!!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19335
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 09.05.09 11:17 
Moin!

user profile iconJungerIslaender hat folgendes geschrieben Zum zitierten Posting springen:
Ich seh zwar nicht wer das schon als Lösungsansatz gebracht hatte
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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

user profile iconJungerIslaender hat folgendes geschrieben Zum zitierten Posting springen:
aber es Funtioniert^^
"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)... :roll:

Viel Erfolg noch
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.