![]() |
Re: SQL Syntax Error? Was ist falsch?
Moin EvilCodein!
Wie ich vermute, willst du Daten aus einer Datei in eine Datenbank übertragen. Du baust so zu sagen eine Import-Routine. Um so eine Aufgabe zu lösen, muss man vor allem den Aufbau des eingelesenen Datensatzes kennen. Da der Record eine feste Länge hat und alle Felder immer gleich lang sind, hast du versucht ihn mit Hilfe des TARDRecord zu definieren. So weit so gut. Hier muss ich sagen, dass ich die „array[] of char“ vermeide. Es sei denn, ich benötige tatsächlich einzelne Chars oder möchte auf einzelne Bytes (sprich Buchstaben) eines Strings zugreifen. Um Daten zu importieren brauchst du doch keine einzelnen Chars, oder? Also hier meine Vorschläge in Bezug auf dein Problem: A. Benutze „String[Länge]“ statt „Array[X..Y] of Char“:
Delphi-Quellcode:
statt
TADRRecord = packed record
ID: string[13]; Anrede: string[13]; Name: string[87]; end;
Delphi-Quellcode:
B. Vermeide den Datentyp „Variant“, wenn immer es möglich ist:
TADRRecord = packed record
ID: array[1..13] of char; Anrede: array[1..13] of char; Name: array[1..87] of char; end;
Delphi-Quellcode:
statt
Query1.ParamByName('id').AsString := MyTestRecord.ID;
Delphi-Quellcode:
Query1.ParamByName('id').Value := MyTestRecord.ID;
Und nun ein vollständiges Test-Projekt:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, DBTables; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; Query1: TQuery; Label4: TLabel; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; type TestRecord = packed record ID: string[13]; Anrede: string[13]; Name: string[87]; end; var Form1: TForm1; MyTestRecord: TestRecord; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin MyTestRecord.ID := 'My_ID*'; MyTestRecord.Anrede := 'My_Anrede*'; MyTestRecord.Name := 'My_Name*'; end; procedure TForm1.Button1Click(Sender: TObject); begin Label1.Caption := MyTestRecord.ID; Label2.Caption := MyTestRecord.Anrede; Label3.Caption := MyTestRecord.Name; Query1.SQL.Clear; Query1.SQL.Add('insert into customer (id,anrede,name)'); Query1.SQL.Add(' values (:id,:anrede,:name)'); Query1.ParamByName('id').AsString := MyTestRecord.ID; Query1.ParamByName('anrede').AsString := MyTestRecord.Anrede; Query1.ParamByName('name').AsString := MyTestRecord.Name; Query1.Prepare; Query1.ExecSQL; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:36 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