Einzelnen Beitrag anzeigen

MarkusB

Registriert seit: 3. Apr 2004
Ort: Hamburg
105 Beiträge
 
#21

Re: SQL Syntax Error? Was ist falsch?

  Alt 12. Mai 2005, 13:07
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.
  Mit Zitat antworten Zitat