AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL Syntax Error? Was ist falsch?
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Syntax Error? Was ist falsch?

Ein Thema von EvilCodein · begonnen am 11. Mai 2005 · letzter Beitrag vom 12. Mai 2005
Antwort Antwort
Seite 1 von 3  1 23      
EvilCodein

Registriert seit: 15. Jan 2005
Ort: Bernburg
46 Beiträge
 
Delphi 2005 Architect
 
#1

SQL Syntax Error? Was ist falsch?

  Alt 11. Mai 2005, 14:44
Datenbank: Access • Version: JET 4.0 • Zugriff über: ADO + SQL
HI! Ich habe eine Datenbank die ich mit hilfe von Records auslese. Nun möchte ich diese Datensatz für Datensatz in eine Access-DB mittels ADO und SQL übertragen. Aber ich bekomme immer wieder eine SQL Syntax Error Message und weiß nicht woran es liegen könnte...

Delphi-Quellcode:
type
  TARDRecord = packed record
    ID: array[1..13] of Char;
    Anrede: array[1..13] of Char;
    Art: array[1..13] of Char;
    Kunde: array[1..61] of Char;
    Name: array[1..87] of Char;
    Strasse: array[1..61] of Char;
    PLZ: array[1..10] of Char;
    Ort: array[1..41] of Char;
    Tel: array[1..21] of Char;
    Mobil: array[1..21] of Char;
    Buffer: array[1..102] of Char;
    Datum: array[1..16] of Char;
    Preis: array[1..16] of Char;
    Feld1: array[1..1] of Char;
    Feld2: array[1..6] of Char;
    Anzahl: array[1..6] of Char;
    Feld3: array[1..61] of Char;
    Feld4: array[1..61] of Char;
  end;

...

function TEDM.SyncData: Boolean;
var
  SQL: String;
begin
  SyncData := TRUE;
  AssignFile(ARDFile, 'D:\EvilBird\Kunden.ard');
  Reset(ARDFile);
  while not Eof(ARDFile) do
  begin
    try
      Clients.Close;
      Clients.SQL.Clear;
      Clients.SQL.Add('INSERT INTO Clients ( ID, ClientNumber, Anrede, Name, Street, PLZ, City, HomePhone, MobilePhone) VALUES ( '''', ''' + ARDRecord.ID + ''', ''' + ARDRecord.Name + ''', ''' + ARDRecord.Strasse + ''', ''' + ARDRecord.PLZ + ''', ''' + ARDRecord.Ort + ''', ''' + ARDRecord.Tel + ''', ''' + ARDRecord.Mobil + ''' );');
      Clients.ExecSQL;
    except
      SyncData := FALSE;
    end;
  end;
  CloseFile(ARDFile);
end;
Bitte helft mir, ich komme hier einfach nicht weiter
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: SQL Syntax Error? Was ist falsch?

  Alt 11. Mai 2005, 14:53
1, Welche Fehlermeldung
2, Welche Werte haben deine Strings
3, Arbeite lieber mit Parametrisierten Abfragen.

Ich vermute mal das irgeneiner deiner Daten eine Hochkomma beinhaltet und damit keine gültige SQL-Anweisung mehr darstellt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: SQL Syntax Error? Was ist falsch?

  Alt 11. Mai 2005, 14:57
Hallo,

evtl. liegt es an den Anführungszeichen. Access erwartet für Text-Felder doppelte Anführungszeichen. Ausserdem scheint Deine Parameteranzahl nicht zu stimmen (es fehlt die Anrede)!

Folgendes sollte funktionieren:

Delphi-Quellcode:
var aQry:String;
...
aQry:='INSERT INTO Clients'+#13#10+
      '(ID, ClientNumber, Anrede, Name, Street, PLZ, City, HomePhone, MobilePhone)'+#13#10+
      'VALUES ("%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s", "%s")';
...
  Clients.Close;
  with ARDRecord do
    Clients.SQL.Text:=Format(aQry, ['', ID, Anrede, Name, Strasse, PLZ, Ort, Tel, Mobil]);
  Clients.ExecSQL;
...
  Mit Zitat antworten Zitat
EvilCodein

Registriert seit: 15. Jan 2005
Ort: Bernburg
46 Beiträge
 
Delphi 2005 Architect
 
#4

Re: SQL Syntax Error? Was ist falsch?

  Alt 11. Mai 2005, 15:03
1. "Syntax error in string in query expression ''''! "
2. Keine Ahnung, da ich bis jetzt noch nicht alle 1500 Datensätze gesehen hab.
3. Hab ich schon probiert aber habs nicht hinbekommen, also wie?

codein
  Mit Zitat antworten Zitat
EvilCodein

Registriert seit: 15. Jan 2005
Ort: Bernburg
46 Beiträge
 
Delphi 2005 Architect
 
#5

Re: SQL Syntax Error? Was ist falsch?

  Alt 11. Mai 2005, 15:10
Hi Gollum!

Thx für dienen Vorschlag...
Ich bekomme jetzt aber das hier

[Error] EDMUnit.pas(351): Bad argument type in variable type array constructor Das schlimme ist, ich kann damit nichts anfangen...
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#6

Re: SQL Syntax Error? Was ist falsch?

  Alt 11. Mai 2005, 15:11
Hallo,

hast Du mal meine Version ausprobiert?

Das selbe Spielchen aber diesmal mit Parameter:

Delphi-Quellcode:
aQry:='INSERT INTO Clients'+#13#10+
      '(ID, ClientNumber, Anrede, Name, Street, PLZ, City, HomePhone, MobilePhone)'+#13#10+
      'VALUES (:p1, :p2, :p3, :p4, :p5, :p6, :p7, :p8, :p9)';
...
  with Clients, ARDRecord do
  begin
    Close;
    SQL.Text:=aQry;
    ParamByName('p1').AsString:='';
    ParamByName('p2').AsString:=ID;
    ParamByName('p3').AsString:=Anrede;
    ...
    ...
    ParamByName('p9').AsString:=Mobil;
    ExecSQL;
  end; // with
...
Edit:
Irgendwie habe ich das Gefühl, es liegt an dem ominösen Feld ID. Was für ein Typ ist dieses Feld in der Access-DB? Ein AutoIncrement-Feld? Wenn ja, dann kannst Du es beim Einfügen weglassen!!

Edit2:
Es kann aber auch daran liegen, dass das Statement mit deiner Array of Char-Deklaration nicht zurechtkommt. Evtl. hilft es, wenn Du die Chars mit StrPas(Recordfeld) in einen Delphi-String konvertierst.
  Mit Zitat antworten Zitat
EvilCodein

Registriert seit: 15. Jan 2005
Ort: Bernburg
46 Beiträge
 
Delphi 2005 Architect
 
#7

Re: SQL Syntax Error? Was ist falsch?

  Alt 11. Mai 2005, 15:24
ja deine Version ist die die mir diese Fehlermeldung produziert hat. Ich werd jetzt auch mal die andere ausprobieren. Das Feld ID in der Access-DB ist ein AutoIncrement-Feld. ARDRecord.ID ist jedoch hingegen eine Kundennummer like 10537.

Wie soll ich denn das mit dem DelphiString machen? Ich hab keine Ahnung wie du das meinst...

codein
  Mit Zitat antworten Zitat
SvB

Registriert seit: 21. Okt 2004
Ort: Eckenroth
426 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

Re: SQL Syntax Error? Was ist falsch?

  Alt 11. Mai 2005, 15:30
Hallo,

der Inhalt eins Autoinkremtet-Feld wird automatisch durch die Datenbank (sags einfach mal so) gesetzt, d.h. wenn Du versuchst dort was reinzuschreiben, dann gibts eine Fehlermeldung.

Ich mache es normalerweise so

Client.SQL.Text := 'xxxx'

Dann kann ich im Debugger vor dem Aufruf von EXECSQL nachschauen, wie denn genau mein SQL Befehl aussieht und kann somit den Fehler relativ einfach finden.

Grüße
Sven
Sven

Alle sagen, das geht nicht. Da kam einer, der wusste das nicht und hat es gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

Re: SQL Syntax Error? Was ist falsch?

  Alt 11. Mai 2005, 15:34
Hallo,

Zitat von EvilCodein:
Das Feld ID in der Access-DB ist ein AutoIncrement-Feld
wenn das so ist, dann musst Du im Insert-Statement das Feld ID weglassen. Siehe auch Post von SvB.

Wenn jetzt folgendes nicht funktioniert, dann weiß ich auch nicht mehr weiter:
Delphi-Quellcode:
aQry:='INSERT INTO Clients'+#13#10+
      '(ClientNumber, Anrede, Name, Street, PLZ, City, HomePhone, MobilePhone)'+#13#10+
      'VALUES (:p1, :p2, :p3, :p4, :p5, :p6, :p7, :p8)';
...
  with Clients, ARDRecord do
  begin
    Close;
    SQL.Text:=aQry;
    ParamByName('p1').AsString:=ID; // evtl. ParamByName('p1').AsString:=StrPas(ID);
    ParamByName('p2').AsString:=Anrede;
    ...
    ...
    ParamByName('p8').AsString:=Mobil;
    ExecSQL;
  end; // with
...
  Mit Zitat antworten Zitat
EvilCodein

Registriert seit: 15. Jan 2005
Ort: Bernburg
46 Beiträge
 
Delphi 2005 Architect
 
#10

Re: SQL Syntax Error? Was ist falsch?

  Alt 11. Mai 2005, 15:35
OK sie schaut jetzt so aus:

Delphi-Quellcode:
function TEDM.SyncData: Boolean;
var
  SQL: String;
  Qry:String;
begin
  SyncData := TRUE;
  AssignFile(ARDFile, 'D:\EvilBird\Kunden.ard');
  Reset(ARDFile);
  while not Eof(ARDFile) do
  begin
    try
      Qry:='INSERT INTO Clients'+#13#10+
      '(ClientNumber, Anrede, Name, Street, PLZ, City, HomePhone, MobilePhone)'+#13#10+
      'VALUES (:p1, :p2, :p3, :p4, :p5, :p6, :p7, :p8)';
      with Clients, ARDRecord do
      begin
        Close;
        SQL.Text:=Qry;
        Parameters.ParamByName('p1').Value:=StrPas(ID);
        Parameters.ParamByName('p2').Value:=StrPas(Anrede);
        Parameters.ParamByName('p3').Value:=StrPas(Name);
        Parameters.ParamByName('p4').Value:=StrPas(Strasse);
        Parameters.ParamByName('p5').Value:=StrPas(PLZ);
        Parameters.ParamByName('p6').Value:=StrPas(Ort);
        Parameters.ParamByName('p7').Value:=StrPas(Tel);
        Parameters.ParamByName('p8').Value:=StrPas(Mobil);
        ExecSQL;
      end;
    except
      SyncData := FALSE;
    end;
  end;
  CloseFile(ARDFile);
end;
Das Problem ist jetzt bekomme ich diese Fehlermeldung:
[Error] EDMUnit.pas(354): Incompatible types: 'Array' and 'PAnsiChar'

Wenn ich die Funktion StrPas(Record) weglasse bekomme ich diese:
[Error] EDMUnit.pas(354): Incompatible types: 'Variant' and 'Array'

Hast du da noch eine Idee?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 08:23 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