Autor Beitrag
THF
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110

Vista
Delphi 2005 professional
BeitragVerfasst: Fr 30.01.09 12:02 
Hallo,

wie kann ich ohne BDE eine neue Access-Datenbank (z.B. Test.mdb) mit ADO anlegen ???
Ich hab das noch nie gemacht.
iKilledKenny
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: Fr 30.01.09 12:05 
Ich glaube, das geht nicht. ADO ist eine Möglichkeit auf vorhandene Datenbanken zuzugreifen, nicht aber welche anzulegen.

Bitte korrigiert mich, wenn das anders ein sollte.
THF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110

Vista
Delphi 2005 professional
BeitragVerfasst: Fr 30.01.09 12:08 
user profile iconiKilledKenny hat folgendes geschrieben Zum zitierten Posting springen:
Ich glaube, das geht nicht. ADO ist eine Möglichkeit auf vorhandene Datenbanken zuzugreifen, nicht aber welche anzulegen.

Bitte korrigiert mich, wenn das anders ein sollte.


Also eine Datenbank mit BDE anlegen und dann mit ADO zugreifen ?
iKilledKenny
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: Fr 30.01.09 12:14 
Also wenns drum geht, eine leere Access-DB mit einem Programm auszuliefern, so habe ich die DB immer als Resource mit im Programm gehabt und bei bedarf "entpackt".

Ansonsten halt mit Access anlegen.
THF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110

Vista
Delphi 2005 professional
BeitragVerfasst: Fr 30.01.09 12:18 
Hier stehts , ich werds mal ausprobieren

www.delphipraxis.net...light=access+anlegen
THF Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110

Vista
Delphi 2005 professional
BeitragVerfasst: Fr 30.01.09 16:56 
Ich hab jetzt die leere Access-Datenbank angelegt.
Hat funktioniert, da ich kein Access habe , geht es leider nicht anders.


Müßte jetzt nur noch wissen , wie ich jetzt eine Tabelle mit Spalten anlege.
Was muß ich bei ADOTable1.Tablename:= ........ eintragen ??
dummzeuch
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 593
Erhaltene Danke: 5


Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
BeitragVerfasst: Fr 30.01.09 21:59 
user profile iconTHF hat folgendes geschrieben Zum zitierten Posting springen:
wie kann ich ohne BDE eine neue Access-Datenbank (z.B. Test.mdb) mit ADO anlegen ???


svn.berlios.de/wsvn/...atorCreateAccess.pas

twm
Ydobon
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 42



BeitragVerfasst: Fr 30.01.09 22:09 
Wenn man schon eine Datenbank hat, ist es eher zu empfehlen diese mit einer TADOConnection zu verbinden und per Execute ein 'CREATE TABLE Tabelle1 (Feld1 INTEGER, Feld2 TEXT(50)...' abzuschicken. Mit ADOX lässt sich zwar mehr einstellen, aber, wann braucht man das und SQL erspart den Schreibkrampf.
SmileySN
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: Fr 30.01.09 22:31 
Das erstellen einer AccessDB und das erstellen einer Tabelle darin sieht folgendermaßen aus.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
//******************************************************************************
//********************** Datenbank erstellen ***********************************
//******************************************************************************
// Erstellt eine neue Access Datenbankdatei
// Aufruf mit DBError:=CreateDB(Pfad+DBName,True); //(DBError:String)
// DBName besteht aus Laufwerk+Pfad+Datenbankname
// (.mdb kann aber muss nicht angegeben werden)
// Der zweite Parameter sagt aus, ob eine vorhandene Datei überschrieben werden darf.
// Wird False angegeben, dann erzeugt eine vorhandene Datei einen Fehlertext.
Function CreateDB(DBName: String; DelIfExists: Boolean = False): String;
Var
  DBEngine, Workspace, Database: OleVariant;
  s, DBError                  : String;
Const
  dbLangGeneral               = ';LANGID=0x0409;';

  //____________________________________________________________________________
  Function DBAnlegen: String;
  Begin
    s := dbLangGeneral + 'CP=' + IntToStr(GetACP()) + ';COUNTRY=0';
    DBEngine := CreateOleObject('DAO.DBEngine.36');
    Try
      Try
        Workspace := DBEngine.Workspaces[0];
        Database := Workspace.CreateDatabase(DBName, s, 64);
        Database.Close;
        Workspace.Close;
        DBError := OpenDB(DBName);
        If DBError <> '' Then
          Result := DBError;
      Except
        On E: Exception Do
          Result := E.Message;
      End;
    Finally
      Database := NULL;
      Workspace := NULL;
      DBEngine := NULL;
    End;
  End;
  //____________________________________________________________________________

Begin
  Result := '';
  //  showmessage('------ '+DBName+' ------');
  If LowerCase(Copy(DBName, Length(DBName) - 34)) <> '.mdb' Then
    DBName := DBName + '.mdb';
  If FileExists(DBName) Then
    If DelIfExists Then
      Begin
        DeleteFile(PChar(DBName));
        Result := DBAnlegen;
      End
    Else
      Begin
        DBError := 'Datenbank existiert bereits, das löschen wurde verweigert';
        Result := DBError;
      End
  Else
    Result := DBAnlegen;
End;

//******************************************************************************
//********************** Tabelle erzeugen **************************************
//******************************************************************************
// Tabelle in der aktuellen Datenbank anlegen.
// Aufruf mit DBError:=CreateTable(Pfad+DBName,Tabellenname); //(DBError:String)
Function CreateTable(DBName, Tabelle: String): String;
Var
  cCreateData, s, DBError: String;

Begin
  // Hier Tabelle erstellen
  // Result := False wenn die Erstellung fehlgeschlagen ist
  cCreateData := 'CREATE TABLE ' + Tabelle + '('
    + 'ID Counter PRIMARY KEY,'
    + 'Name Varchar(30),'
    + 'Row integer,'
    + 'Col integer,'
    + 'Data Varchar(30),'
    + 'DataTyp Byte,'
    + 'FormatNr Byte,'
    + 'Format Varchar(20),'
    + 'Pre Varchar(10),'
    + 'Post Varchar(10));';

  s := OpenDB(DBName);
  if s='' then
  begin
    Con1.LoginPrompt := False;
    Con1.Open; // Datenbank aktivieren
    qryDat.Connection := Con1;
{
    Try
      // Vorhandene Tabelle löschen
      // Abfragen ob die Tabelle schon vorhanden ist, wenn ja dann Tabelle löschen
      qryDat.SQL.Text := 'Drop Table ' + Tabelle;
      qryDat.ExecSQL;
    Except
      //DBError:='Tabelle konnte nicht gelöscht werden';
    End;
}

    Try
      qryDat.SQL.Text := cCreateData; // Tabelle für Daten erzeugen
      qryDat.ExecSQL; // Da keine Daten zurückgegeben werden ExecSQL ausführen

      qryDat.SQL.Text := 'Create Index IxRow on ' + Tabelle + '(Row)'// Index Row erstellen
      qryDat.ExecSQL; // Da keine Daten zurückgegeben werden ExecSQL ausführen

      qryDat.SQL.Text := 'Create Index IxCol on ' + Tabelle + '(Col)'// Index Col erstellen
      qryDat.ExecSQL; // Da keine Daten zurückgegeben werden ExecSQL ausführen

      qryDat.SQL.Text := 'Select * From ' + Tabelle; // Daten-Tabelle Selektieren
      qryDat.Open; // Hier werden Daten zurückgegeben, daher open ausführen

      LastTable := Tabelle;
      Result := '';
    Except
      DBError := 'Tabelle konnte nicht angelegt werden';
      LastTable := '';
      Result := DBError;
    End;
  end;
End;