Hi, ich glaub jetzt hab ich die Ursache für den Fehler gefunden.
Bei mir ist es so, dass ich bei der ConnectionString im Objektinspektor nichts drinn stehen habe. Das heist, ich kann, wenn ich im Programmiermodus bin, nichts neues erstellen.
Ich rufe erst die Connectionstring beim start des Programmes auf. Ich habe das deshalb gemacht, da ich den Path von der Datenbank in die Registry schreibe und von dortaus auch ablese. (Das hat so seine Gründe).
Und ein Passwort habe ich ja auch in der Connectionstring.
So sieht der Code aus:
Code:
procedure TDM.DataModuleCreate(Sender: TObject);
var REG:TRegistry;
a:string;
begin
REG:=Tregistry.create;
try
REG.RootKey := HKEY_CURRENT_USER;
REG.Access := KEY_READ;
if REG.OpenKeyReadOnly('Software\AriusDB\SettingsDB') then
begin
try
a:=REG.ReadString('DBPath');
if not DirectoryExists(a) then
begin
MessageBox(0,PChar(SysErrorMessage(GetLastError)+#13#13+'Datenbank wurde nicht gefunden! Wert: '+IntToStr(GetLastError)),'Fehler!',MB_ICONERROR or MB_OK);
end;
except
MessageBox(0,PChar(SysErrorMessage(GetLastError)+#13#13+'Datenbank wurde nicht gefunden! Wert: '+IntToStr(GetLastError)),'Fehler!',MB_ICONERROR or MB_OK);
end;
end
else
begin
MessageBox(0,PChar(SysErrorMessage(GetLastError)+#13#13+'Datenbank wurde nicht gefunden! Wert: '+IntToStr(GetLastError)),'Fehler!',MB_ICONERROR or MB_OK);
end;
finally
FreeAndNil(REG);
end;
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=' +
a + '\Kundendaten.mdb;Mode=ReadWrite;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password=passwort;'+
'Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;' +
'Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don''t Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False';
ADOConnection1.Connected := TRUE;
DM.ADOSHaupt.Open; DM.ADOSKinder.Open; DM.ADOSGeschaeft.Open; DM.ADOSFinanzierung.Open;
DM.ADOSHaushalt.Open; DM.ADOSAnlageprofiel.Open; DM.ADOSEmpfehlung.Open; DM.ADODataSet1.Open;
DM.ADODataSet2.Open;
end;
Kann ich das auch anders machen, so dass ich im Programmiermodus auch aktuell bin?