Entwickler-Ecke

Datenbanken - Access Datenbank zur Laufzeit


axlegolas - Fr 10.02.06 09:58
Titel: Access Datenbank zur Laufzeit
Hallo und guten morgen.

wollte mal fragen, wie ich eine access db zur laufzeit erzeugen kann. ich hänge momentan an an meinem TableType und DatabaseName. kann es denn sein, daß delphi kein access unterstützt sondern nur paradox oder dbase?


mkinzler - Fr 10.02.06 10:11

Denn Zugriff auf eine Access-Datenbank sollte man über ADO machen nicht über die BDE, wie du es vermutlich gerade versuchst. Über ADO/Jet kann man in Delphi einfach auf die Daten einer mdb zugreifen.


axlegolas - Fr 10.02.06 10:37

Es geht mir dabei nicht um den zugriff, den handle ich mit ADO. Ich muß aber zunächst mal eine Access db erzeugen(Create db)!


mkinzler - Fr 10.02.06 10:45

Kannst du über ADi keine Datenbanken erzeugen? In diesem Fall kannst du dir in der BDE einen Alias über ODBC auf die Access-Datenbank anlegen und versuchen darüber einen neue dateu zu erstellen.


afk - Fr 10.02.06 12:27


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function DAOJetCreateDB(DBName: String; Options: Integer = dbVersion30): Boolean;
var
  Engine,
  Workspace: variant;
begin
  Result:=False;
  try
    Engine:=CreateOleObject(DAOMSJet);
    Workspace:=Engine.Workspaces[0];
    Workspace.CreateDatabase(DBName, dbLangGeneral, Options);
    Workspace:=Unassigned;
    Engine:=Unassigned;
    Result:=True;
  except
    on E: Exception do ShowMessage(E.Message);
  end;
end;

So sollte es funktionieren. DBName ist der Dateiname (incl. Pfad) der Datenbank-Datei.

Gruß Axel


afk - Fr 10.02.06 12:31

Hab die Konstanten vergessen ... :oops:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
const
  DAOMSJet = 'DAO.DBEngine.35';
  dbLangGeneral = ';LANGID=0x0409;CP=1252;COUNTRY=0';

  dbVersion10 = 1;
  dbEncrypt   = 2;
  dbDecrypt   = 4{only used when packing}
  dbVersion11 = 8;
  dbVersion20 = 16{Access 2.0}
  dbVersion30 = 32{Access 95}

Gruß Axel


axlegolas - Fr 10.02.06 12:40

Also des funzt mal gar nicht :nixweiss:


afk - Fr 10.02.06 14:06

user profile iconaxlegolas hat folgendes geschrieben:
Also des funzt mal gar nicht :nixweiss:

Was heißt das ?
Compiliert nicht ? Exception ? Legt die DB einfach nicht an ?

Bei mir tut das einwandfrei.

Gruß Axel


axlegolas - Fr 10.02.06 14:21

legt keine db an!!


espen - Fr 10.02.06 14:24

Gruezi...

http://www.swissdelphicenter.ch/de/showcode.php?id=1695

Gruss,
Espen


axlegolas - Fr 10.02.06 14:40

@espen

super link danke für den tip :D


axlegolas - Fr 10.02.06 15:14

@espen

da denkt man gerade 'super alles funzt', da kommt das nächste problem....
wie gesagt legt mir mein prog eine mdb an. nun erzeugt es mir aber eigene tabellen, die dann nicht in der datenbank sind. :eyecrazy:

"HIIIIIIIIIIIILFEEEEEEE" :gruebel:

kannst du mir vielleicht noch sagen kannst wie ich das handlen kann?


espen - Fr 10.02.06 15:33

Hi nochmal,

da habe ich zwei Lösungsvorschläge:

1. Du erstellst eine (leere) Originaldatenbank, welche Du dann in das entsprechende Verzeichnis kopierst.
2. Du benutzt ADOCommand und führst ein 'Create Table TableName (...)' auf der Access-Datenbank aus (Kopfkratz, weiss (noch) nicht ob das mit Access geht)
Edit:
Doch kein kopfkratz, mit ADOCommand kannst Du die Tabellen erzeugen.


Grüßle


axlegolas - Mo 13.02.06 09:16

morgen erstmal,

ich weiß nicht ganz, ich glaub ich steh aufm' schlauch. habe nun die ADOCommand angelegt. Dann habe ich den connectionstring gesetzt und versuch jetzt mit commandtext und execute die tabelle version in meiner datenbank zu erstellen. aber des funzt nicht wirklich. habe wohl die falsche sql anweisung gegeben:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
CreateAccessDatabase(pDatabase);
     //---------------------------------------------
TableSet:= TADOCommand.Create(Self);                               
TableSet.ConnectionString:= 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+pDatabase+';Persist              Security Info=False';
TableSet.CommandText:= 'CREATE TABLE "Version"';
TableSet.Execute;


Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt


espen - Mo 13.02.06 14:19

Tach auch,

also als erstes muss das heissen:

Delphi-Quelltext
1:
2:
// **** Ohne "
TableSet.CommandText:= 'CREATE TABLE Version';


Damit wird die Tabelle schon mal angelegt. Allerdings solltest Du der Tabelle noch ein paar
Felder gönnen ;-)
z.B.:

Delphi-Quelltext
1:
TableSet.CommandText := CREATE TABLE Version(Feld1 INTEGER NOT NULL, Feld2 VARCHAR(40NOT NULL)