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:
TADRRecord = packed record
ID: string[13];
Anrede: string[13];
Name: string[87];
end;
statt
Delphi-Quellcode:
TADRRecord = packed record
ID: array[1..13] of char;
Anrede: array[1..13] of char;
Name: array[1..87] of char;
end;
B. Vermeide den Datentyp „Variant“, wenn immer es möglich ist:
Query1.ParamByName('id').AsString := MyTestRecord.ID;
statt
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.