hi!
Ich hab ein Problem mit meinem Quelltext...
Ich hab ein Programm gebastelt, welches mir ermöglicht datensätze aus einer mir unbekannten-Datenbank auszulesen und diese auf den Bildschirm zu schreiben. Funzt...
Delphi-Quellcode:
program ARDReader;
{$APPTYPE CONSOLE}
uses
SysUtils;
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;
var
ARDFile: file of TARDRecord;
ARDRecord: TARDRecord;
RecordCount: Integer = 0;
begin
AssignFile(ARDFile, 'C:\Dokumente und Einstellungen\Herr Boo\Desktop\evilbird\KUNDEN.ARD');
Reset(ARDFile);
WriteLn('Größe pro Datensatz: ' + IntToStr(SizeOf(TARDRecord)) + ' Byte');
WriteLn;
while not Eof(ARDFile) do
begin
Read(ARDFile, ARDRecord);
WriteLn(
ARDRecord.ID +
ARDRecord.Anrede +
ARDRecord.Art +
ARDRecord.Kunde +
ARDRecord.Name +
ARDRecord.Strasse +
ARDRecord.PLZ +
ARDRecord.Ort +
ARDRecord.Tel +
ARDRecord.Mobil +
ARDRecord.Buffer +
ARDRecord.Datum +
ARDRecord.Preis +
ARDRecord.Feld1 +
ARDRecord.Feld2 +
ARDRecord.Anzahl +
ARDRecord.Feld3 +
ARDRecord.Feld4);
Inc(RecordCount);
end;
WriteLn;
WriteLn('Anzahl der Datensätze: ' + IntToStr(RecordCount));
CloseFile(ARDFile);
ReadLn;
end.
Aber wenn ich das in Delphi 2005 implementiere dann bekomm ich nach 5-7 sek. eine meldung:
First chance
exception at $7C81EB33.
Exception class EOleException with message 'Das Feld ist zu klein für die Datenmenge, die Sie hinzufügen wollten. Versuchen Sie, weniger Daten einzufügen'. Process ServiceReport.exe (1688)
ich habs nich so ganz kapiert. Hab auch schon alles mögliche ausprobiert, um den Record wieder leer zu machen, aber ich bekomms nich hin... Is da was falsch? hab ich mir da was dummes ausgedacht, oder kommt das so hin? Ich hab die Fremd-Datenbank und die
Access als Zip dran gehängt..
mein Quelltext sieht so aus:
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;
type
TData = class(TDataModule)
Connection: TADOConnection;
ClientsTable: TADOTable;
InstructionsTable: TADOTable;
InstructionsTableID: TAutoIncField;
InstructionsTableCID: TWideStringField;
InstructionsTableState: TIntegerField;
InstructionsTableUser: TIntegerField;
InstructionsTableDate: TWideStringField;
InstructionsTableHardeware: TWideStringField;
InstructionsTableManufactor: TWideStringField;
InstructionsTableSN: TWideStringField;
InstructionsTableSpecification: TWideStringField;
InstructionsTableOwn: TIntegerField;
InstructionsTableMoreInformation: TMemoField;
InstructionsTableErrorActions: TWideStringField;
InstructionsTableErrorTime: TWideStringField;
InstructionsTableErrorMoreInfo: TMemoField;
ClientsTableID: TWideStringField;
ClientsTableAnrede: TWideStringField;
ClientsTableName: TWideStringField;
ClientsTableStreet: TWideStringField;
ClientsTablePLZ: TWideStringField;
ClientsTableCity: TWideStringField;
ClientsTableHomePhone: TWideStringField;
ClientsTableMobilePhone: TWideStringField;
ClientsTableField3: TWideStringField;
ClientsTableField4: TWideStringField;
UsersTable: TADOTable;
UsersTableID: TAutoIncField;
UsersTableUser: TWideStringField;
ClientsDS: TDataSource;
InstructionsDS: TDataSource;
UsersDS: TDataSource;
ClientsQuery: TADOQuery;
InstrucionsQuery: TADOQuery;
UsersQuery: TADOQuery;
private
{ Private declarations }
public
{ Public declarations }
function SyncDatabase: Boolean;
end;
var
Data: TData;
ARDFile: file of TARDRecord;
ARDRecord: TARDRecord;
RecordCount: Integer = 0;
function TData.SyncDatabase: Boolean;
var Fp: String;
f: File of Byte;
DataArray: Array[1..20] of string;
begin
Fp := 'C:\Dokumente und Einstellungen\Herr Boo\Desktop\evilbird\KUNDEN.ARD'; //Ini.ReadString('Settings', 'SyncFilePath', '');
AssignFile(ARDFile, Fp);
Reset(ARDFile);
ClientsQuery.SQL.Clear;
ClientsQuery.SQL.Add('DELETE * FROM Clients');
ClientsQuery.ExecSQL;
while not Eof(ARDFile) do
begin
Read(ARDFile, ARDRecord);
ClientsQuery.SQL.Clear;
ClientsQuery.SQL.Add('INSERT INTO clients (ID, Anrede, Name, Street, PLZ, City, HomePhone, MobilePhone, Field3, Field4)');
ClientsQuery.SQL.Add('VALUES (:var1, :var2, :var3, :var4, :var5, :var6, :var7, :var8, :var9, :var10)');
DataArray[1] := ARDRecord.ID;
DataArray[2] := ARDRecord.Anrede;
DataArray[3] := ARDRecord.Name;
DataArray[4] := ARDRecord.Strasse;
DataArray[5] := ARDRecord.PLZ;
DataArray[6] := ARDRecord.Ort;
DataArray[7] := ARDRecord.Tel;
DataArray[8] := ARDRecord.Mobil;
DataArray[9] := ARDRecord.Feld3;
DataArray[10] := ARDRecord.Feld4;
ClientsQuery.Parameters.ParamByName('var1').Value := DataArray[1];
ClientsQuery.Parameters.ParamByName('var2').Value := DataArray[2];
ClientsQuery.Parameters.ParamByName('var3').Value := DataArray[3];
ClientsQuery.Parameters.ParamByName('var4').Value := DataArray[4];
ClientsQuery.Parameters.ParamByName('var5').Value := DataArray[5];
ClientsQuery.Parameters.ParamByName('var6').Value := DataArray[6];
ClientsQuery.Parameters.ParamByName('var7').Value := DataArray[7];
ClientsQuery.Parameters.ParamByName('var8').Value := DataArray[8];
ClientsQuery.Parameters.ParamByName('var9').Value := DataArray[9];
ClientsQuery.Parameters.ParamByName('var10').Value := DataArray[10];
ClientsQuery.ExecSQL;
Inc(Recordcount);
end;
CloseFile(ARDFile);
end;
könnt ihr das bitte mal ausprobieren, oder sieht jemand schon einen fehler??? Ich bin echt voll verwirrt deswegen... Ich komm einfach nich drauf was da falsch is und es lässt mir seit heute nahmittag keine ruhe, weil ich vor 1 monat oder so davon ausging, das das schon funktioniert....
Ich danke euch fürs lesen und noch vielmehr für ideen, anregungen, vorschläge, oder gar hinweise...
codein
Software is like Sex, it's best if it's free.