Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Access 2.0 DB erstellen oder von Access 2003 in 2.0 konvert (https://www.delphipraxis.net/55951-access-2-0-db-erstellen-oder-von-access-2003-2-0-konvert.html)

thejct 29. Okt 2005 11:56

Datenbank: Access mdb • Version: 2003 • Zugriff über: ADO

Access 2.0 DB erstellen oder von Access 2003 in 2.0 konvert
 
Hallo,

stehe vor einem ziemlich blöden Problem:

Habe eine Anwendung programmiert, die Daten transformiert und in eine (neue) Access-DB (.mdb) ausschreibt.
Das klappt soweit. Problem ist nur, dass ich die Datenbank mittels

Delphi-Quellcode:
AccessApp := CreateOleObject('Access.Application');
AccessApp.NewCurrentDatabase(pathHoEr);
erstellen lasse und mit Access 2003/ Jet 4.0 eine Datenbank für Access 2003 erstellt wird.


Die neue DB muss aber in ein (veraltetes) Programm (, dass ich nicht geschrieben habe!!!!) eingelesen werden, welches nur
Access 2.0 unterstützt.


Gibt es eine Möglichkeit eine solch antiquierte DB zu erstellen oder die neue Datenbank (abwärts) zu konvertieren?
(vielleicht mit einer Jet 2.0 Version - wenn ja, wo bekommt man diese - bei Microsoft ist Jet erst ab 3.x erhältlich.)


Freue mich auf eure Vorschläge!

Gruss

thejct


PS: für VisualBasic stellt Microsoft offenbar ein Script zur Verfügung eine Access2.0-DB zu erstellen

Delphi-Quellcode:
Public Function CreateDB()
   Dim newdb As DAO.DATABASE, mydb As DAO.DATABASE
   Dim dbname As String
   Dim tdf As DAO.TableDef

   'Set the path and name for the new database.
   dbname = "C:\Program Files\Microsoft Office" _
             & "\Office\Samples\Newdb.mdb"

   'Create the new 2.0 database and close newdb.
   Set newdb = DBEngine.Workspaces(0).CreateDatabase(dbname, _
   dbLangGeneral, dbVersion20)
   newdb.Close

   'Export all non-system tables to the version 2.0 database.
   Set mydb = CurrentDb()
   For Each tdf In mydb.TableDefs
      If (tdf.Attributes And dbSystemObject) = 0 Then
         DoCmd.TransferDatabase acExport, "Microsoft Access", _
         dbname, acTable, tdf.Name, tdf.Name
      End If
   Next tdf

End Function
Bekommt man das vielleicht in Delphi eingebunden??

jensw_2000 29. Okt 2005 15:48

Re: Access 2.0 DB erstellen oder von Access 2003 in 2.0 kon
 
[alter Post]
Die Schweizer haben was brauchbares für dich in der Codelib.

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


Habs eben mal probiert.
Trotzt installiertem Access 2003 erstellt die Variante über ADOX brav eine 2000er Datenbank ....
[/alter Post]

Habe das 2.0 ignoriert ...

Google mal nach DAO und Delphi.
Da solltest du was finden.

Als Notlösung kannst du dir einfach ein VB Script basteln, das die DB über DAO erzeugt.
Du kannst das Script aus deinem Programm aufrufen und den DB-Namen als Parameter übergeben ....





Schöne Grüße,
Jens
:hi:

thejct 29. Okt 2005 16:07

Re: Access 2.0 DB erstellen oder von Access 2003 in 2.0 kon
 
Hi Jens,

danke für deine Antwort! Leider ist das noch nicht die Lösung!

Ja, damit kann ich zwar eine Access2000-DB erstellen, aber ich brauche tatsächlich (auch wenns kaum zu glauben ist) ein Access2.0-DB, also noch vor Access97!

Bitte helft mir - ich weiß nicht mehr weiter!!!!!!!!!

Gruß

thejct

jensw_2000 29. Okt 2005 18:17

Re: Access 2.0 DB erstellen oder von Access 2003 in 2.0 kon
 
Dann schau die mal die KaDAO Komponenten an.
Freeware incl Source.


http://kadao.dir.bg/

Zitat:

KADao is our TOP and VERY POPULAR FREEWARE component for using Delphi Datasets with Microsoft DAO
It is used by more than 30000 Delphi programmers around the World
In combination with KADao Proffesional it is the most powerfull suite for handling MS Access Databases available on the market.
It is the first freeware component to completly access all databases supported by Microsoft DAO (Data Access Objects) including mdb, xls, dbf etc..
BDE is not required.
Microsoft(r) DAO(tm) must be Installed in order component to run.
Support for both Microsoft(r) Access'xx-Access'97 and Microsoft(r) Access'2000
Works perfectly with Microsoft Office XP - Access'2002
It comes with full source so you can extends its power and protect your future investments.
KADao+KADao Controls+KADao Proffesional gives the user 60 components which handle almost EVERY aspect of DAO programming in Delphi

x000x 29. Okt 2005 20:14

Re: Access 2.0 DB erstellen oder von Access 2003 in 2.0 kon
 
Moin moin,

probier mal folgende function:
Delphi-Quellcode:
uses {..,}Variants, ComObj{,..};
//..
Const
   Jet10 = 1;
   Jet11 = 2;
   Jet20 = 3;
   Jet3x = 4;
   Jet4x = 5;

function CreateAccessDatabase(const FileName: String; const Version: Integer; DelIfExists: Boolean = False): string;
var
   cat: OLEVariant;
begin
   Result := '';
   if FileExists(FileName) And DelIfExists then
      DeleteFile(FileName);
   try
      cat := CreateOleObject('ADOX.Catalog');
      cat.Create('Provider=Microsoft.Jet.OLEDB.4.0;'+
                 'Jet OLEDB:Engine Type='+IntToStr(Version)+';'+
                 'Data Source=' + FileName + ';');
      cat := NULL;
  except
      on e: Exception do Result := e.message;
  end;
end;

procedure TForm1.Button1.Click(Sender: TObject);
begin
   CreateAccessDatabase('test.mdb', Jet20);
end;
//..
bzw. ähnlich deinem obigem VB:
Delphi-Quellcode:
uses {..,}Variants, ComObj{,..};
//..
const
   dbVersion10   = 1;
   dbVersion11   = 8;
   dbVersion20   = 16;
   dbVersion30   = 32;
   dbVersion40   = 64;

function CreateDB(const FileName: String; const Version: Integer; DelIfExists: Boolean = False): String;
var
   DBEngine,
   Workspace,
   Database : OleVariant;
   s        : String;
const
   dbLangGeneral = ';LANGID=0x0409;';
begin
   Result := '';
   if FileExists(FileName) And DelIfExists then
      DeleteFile(FileName);
   s      := dbLangGeneral + 'CP=' + IntToStr(GetACP()) + ';COUNTRY=0';
   DBEngine:= CreateOleObject('DAO.DBEngine.36');
   try
      try
         Workspace := DBEngine.Workspaces[0];
         Database := Workspace.CreateDatabase(FileName, s, Version);
         Database.Close;
         Workspace.Close;
      except
         On E: Exception do
            Result := E.Message;
      end;
   finally
      Database := NULL;
      Workspace := NULL;
      DBEngine := NULL;
   end;
end;

procedure TForm1.Button1.Click(Sender: TObject);
begin
   CreateDB('test.mdb', dbVersion20);
end;

thejct 30. Okt 2005 19:40

Re: Access 2.0 DB erstellen oder von Access 2003 in 2.0 kon
 
Hallo zusammen,

vielen Dank für eure Antworten.

Beide Codes von x000x führen zum gewünschten Ziel!

THX!!!

Gruß

Jan


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz