Registriert seit: 15. Jan 2005
Ort: Bernburg
46 Beiträge
Delphi 2005 Architect
|
Re: Datensatz über Record -> in Access über SQL, Fehler?
8. Dez 2005, 13:42
aber das is ja das problem: kein feld des Records is länger als 102 Zeichen. und die Datenbank is dach diesem Muster (nach dem Muster der Längen der Felder des Records) erstellt. Das bedeutet, das es nicht möglich ist, das ein Feld zu klein für den Inhalt des Records ist.
Aber könnte es sein, das der Record nicht neu beschrieben wird, sondern die nächste Zeichenkette dran gehängt wird?? Ich hab die Idee gehabt, weil wenn das Programm abstürtz kann man bei Delphi2005 einsehen was in den Variablen gespeichert is. In der ARDRecord sind die Daten ja Array-Mäßig gespeichert. ARDRecord.ID besteht aus (#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0) nichts... ?!? Warum.. An der Stelle Sollten diese 13 Plätze die Zahlen für die KundenNummern speichern. Ich kann das nicht verstehen.... Buitte helft mir. Ich muss das unbedingt bald fdertig haben... Ich könnte echt heulen....
Ich hab hier noch die Erstellung der Datenbank zur Laufzeit... Für die die wissen möchten, wie die Access- DB aussieht...
Delphi-Quellcode:
function TEDM.SetupDB(Database: String): Boolean;
var
ADOXCatalog: _Catalog;
ADOXTable: _Table;
ADOXColumn: _ColumnDisp;
ColName: OLEVariant;
DSN: String;
begin
DSN := Format('%s%s',[cCONNECTSTRING, Database]);
ADOXCatalog := CoCatalog.Create;
ADOXCatalog.Create(DSN);
// Clients
ADOXTable := CoTable.Create;
ADOXTable.ParentCatalog := ADOXCatalog;
ADOXTable.Name := 'Clients';
ColName:='ID';
ADOXTable.Columns.Append(ColName, adVarWChar, 50);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Description'].Value := 'ClientNumber';
ColName:='Anrede';
ADOXTable.Columns.Append(ColName, adVarWChar, 50);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Description'].Value := 'Gender';
ColName:='Name';
ADOXTable.Columns.Append(ColName, adVarWChar, 50);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Description'].Value := 'Name';
ColName:='Street';
ADOXTable.Columns.Append(ColName, adVarWChar, 50);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Description'].Value := 'Street';
ColName:='PLZ';
ADOXTable.Columns.Append(ColName, adVarWChar, 50);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Nullable'].Value := True;
ADOXColumn.Properties['Description'].Value := 'PLZ';
ColName:='City';
ADOXTable.Columns.Append(ColName, adVarWChar, 50);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Description'].Value := 'City';
ColName:='HomePhone';
ADOXTable.Columns.Append(ColName, adVarWChar, 50);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Description'].Value := 'PhoneNumber at Home';
ADOXColumn.Properties['Jet OLEDB:Allow Zero Length'].Value := True;
ADOXColumn.Properties['Default'].Value := '(unknown)';
ColName:='MobilePhone';
ADOXTable.Columns.Append(ColName, adVarWChar, 50);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Description'].Value := 'PhoneNumber at Mobile';
ADOXColumn.Properties['Jet OLEDB:Allow Zero Length'].Value := True;
ADOXColumn.Properties['Default'].Value := '(unknown)';
ColName:='Field3';
ADOXTable.Columns.Append(ColName, adVarWChar, 75);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Description'].Value := 'Addon3';
ColName:='Field4';
ADOXTable.Columns.Append(ColName, adVarWChar, 75);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Description'].Value := 'Addon4';
ADOXCatalog.Tables.Append(ADOXTable);
// Instrunctions
ADOXTable := CoTable.Create;
ADOXTable.ParentCatalog := ADOXCatalog;
ADOXTable.Name := 'Instructions';
ColName := 'ID';
ADOXTable.Columns.Append(ColName, adInteger, 10);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['AutoIncrement'].Value := True;
ADOXColumn.Properties['Description'].Value := 'Id of Dataset';
ADOXTable.Keys.Append('ID', adKeyPrimary, ColName, '', '');
ColName:='CID';
ADOXTable.Columns.Append(ColName, adVarWChar, 50);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Description'].Value := 'ClientNumber';
ColName:='State';
ADOXTable.Columns.Append(ColName, adInteger, 1);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Nullable'].Value := True;
ADOXColumn.Properties['Description'].Value := 'Status';
ColName:='User';
ADOXTable.Columns.Append(ColName, adInteger, 1);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Description'].Value := 'User';
ColName:='Date';
ADOXTable.Columns.Append(ColName, adVarWChar, 100);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Description'].Value := 'Date and Time';
ColName:='Hardeware';
ADOXTable.Columns.Append(ColName, adVarWChar, 150);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Description'].Value := 'Hardeware';
ColName:='Manufactor';
ADOXTable.Columns.Append(ColName, adVarWChar, 100);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Description'].Value := 'Manufactor';
ColName:='SN';
ADOXTable.Columns.Append(ColName, adVarWChar, 100);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Description'].Value := 'SerialNumber';
ColName:='Specification';
ADOXTable.Columns.Append(ColName, adVarWChar, 100);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Description'].Value := 'Specification';
ColName:='Own';
ADOXTable.Columns.Append(ColName, adInteger, 1);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Nullable'].Value := True;
ADOXColumn.Properties['Description'].Value := 'Own Hardware';
ColName:='MoreInformation';
ADOXTable.Columns.Append(ColName, adLongVarWChar, 1000);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Description'].Value := 'More Informations';
ColName:='ErrorActions';
ADOXTable.Columns.Append(ColName, adVarWChar, 50);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Description'].Value := 'Action of Error';
ColName:='ErrorTime';
ADOXTable.Columns.Append(ColName, adVarWChar, 150);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Description'].Value := 'Time of Error';
ColName:='ErrorMoreInfo';
ADOXTable.Columns.Append(ColName, adLongVarWChar, 2000);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Description'].Value := 'Info of Error';
ADOXCatalog.Tables.Append(ADOXTable);
// Users
ADOXTable := CoTable.Create;
ADOXTable.ParentCatalog := ADOXCatalog;
ADOXTable.Name := 'Users';
ColName := 'ID';
ADOXTable.Columns.Append(ColName, adInteger, 6);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['AutoIncrement'].Value := True;
ADOXColumn.Properties['Description'].Value := 'Id of User';
ADOXTable.Keys.Append('ID', adKeyPrimary, ColName, '', '');
ColName:='User';
ADOXTable.Columns.Append(ColName, adVarWChar, 30);
ADOXColumn := ADOXTable.Columns.Item[ColName] as _ColumnDisp;
ADOXColumn.Properties['Description'].Value := 'Name of User';
ADOXCatalog.Tables.Append(ADOXTable);
SetupDB := true;
end;
Gibt es eigendlich möglichkeiten, das anders zu implementieren?? Weil ADOX is unter Delphi 2005 nich verfügbar.. oder ich finde es einfach nicht. Kennt jemand Möglicherweise einen anderen Weg eine Access Datenbank zur Laufzeit zu erstellen?
Danke, Codein
Software is like Sex, it's best if it's free.
|