Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Syntax Error? Was ist falsch? (https://www.delphipraxis.net/45729-sql-syntax-error-ist-falsch.html)

MarkusB 12. Mai 2005 13:07

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

Delphi-Quellcode:
Query1.ParamByName('id').AsString    := MyTestRecord.ID;
statt
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.
Seite 3 von 3     123   

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