[Delphi 2005 for WIN32]Database maken met ADO

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • daanmsvl
  • Registratie: Juli 2005
  • Laatst online: 17-06-2021
Ik heb een programma gemaakt dat data in een database file invoert, en gebruik daarvoor ADO. Maar na ettelijke keren zoeken in de help en op internet heb ik nog geen antwoord gevonden dat ik (a) begrijp en (b) kan gebruiken.

Wat ik eigenlijk wil is een lege database maken. Deze is vrij eenvoudig van opzet.
Het moet een MS Access database zijn (95 of hoger, liefst 95) met daarin een tabel, genaamd MAIN

In MAIN moeten 3 velden zitten:

ItemNum : Number
DataType : Number
Data : Text

Dat is alles. Ik gebruik nu een ADOTable om te connecten naar een database maar dat is een reeds bestaande database. Tot nu toe moet mijn programma dus 'appenden' aan een bestaande DB. Maar ik wil dus een nieuwe kunnen maken. En zoals gezegd: Of de antwoorden zijn te ingewikkeld voor deze beginner 8)7 of ik kan niets vinden... Wie helpt mij op weg?

"Military intelligence is a contradiction in terms." - Groucho Marx, American Comedian, Actor and Singer, 1890-1977


Acties:
  • 0 Henk 'm!

  • Thekk
  • Registratie: Augustus 2002
  • Laatst online: 05-08 10:42
Is dit ongeveer wat je bedoelt?

2e hit op google...

Ik heb geen zin om een sig te maken.


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 11-08 21:49
Is simpele sql:

CREATE TABLE ??

Maak ook gebruik van Delphi maar met ZEOSLIB, werkt fijner als de ADO componenten.

Acties:
  • 0 Henk 'm!

  • lier
  • Registratie: Januari 2004
  • Laatst online: 10:18

lier

MikroTik nerd

Kan je uitleggen waarom je een nieuwe database dynamisch wil aanmaken ?
Kan je geen andere (tijdelijke) datastore gebruiken, zoals het geheugen ?

Eerst het probleem, dan de oplossing


Acties:
  • 0 Henk 'm!

  • Thekk
  • Registratie: Augustus 2002
  • Laatst online: 05-08 10:42
Depress schreef op zondag 26 maart 2006 @ 15:42:
Is simpele sql:

CREATE TABLE ??

Maak ook gebruik van Delphi maar met ZEOSLIB, werkt fijner als de ADO componenten.
Nee, want daarmee maak je geen database (mdb file) aan, maar een nieuwe tabel. Het voorbeeld gebruikt ADOX om een nieuwe database aan te maken en gaat vervolgens gewoon verder om via ADO mbv querys (o.a. CREATE TABLE ...) de tabellen aan te maken.

Ik heb geen zin om een sig te maken.


Acties:
  • 0 Henk 'm!

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 07-07 14:42
Waarom zou je dat uberhaupt willen? Dat je zelf tabellen aan wilt maken kan ik goed begrijpen, maar waarom een hele nieuwe database ??

Acties:
  • 0 Henk 'm!

Verwijderd

Ik snap wel waarom je dat zou willen (scheelt bij het installen van een progsul wel wat als je geen DB mee hoeft te geven) maar waarom niet een systeem gebruiken die daarvoor beter geschikt is (XML, SQLlite oid?)

Acties:
  • 0 Henk 'm!

  • D-Raven
  • Registratie: November 2001
  • Laatst online: 07-07 14:42
Als dat alleen de reden is... Sorry hoor maar dat vindt ik haast verwaarloosbaar.

Acties:
  • 0 Henk 'm!

  • TG
  • Registratie: Juli 2001
  • Laatst online: 30-10-2024

TG

Wellicht een idee om een kale DB mee te leveren en te copieren tijdens het aanmaken van een nieuwe DB. Je kan deze zelfs als resource in je exe stoppen als je wil voorkomen dat men de schone DB per ongeluk verwijdert

Acties:
  • 0 Henk 'm!

Verwijderd

Dat gaat érg moeilijk worden, zeker als je ook nog eens expliciete invloed wilt hebben op het bestandsformaat.

Een nieuwe Access database is 96 kB (2000 bestandsformaat). Als je 96 kB teveel vindt om als resource in je applicatie te zetten kun je altijd nog compressen. Even ter indicatie: WinRAR maakt er 6 en 9 kB van voor respectievelijk RAR en ZIP. Zelf even kijken wat ZLib(Ex) doet.

[ Voor 4% gewijzigd door Verwijderd op 26-03-2006 21:59 ]


Acties:
  • 0 Henk 'm!

  • TG
  • Registratie: Juli 2001
  • Laatst online: 30-10-2024

TG

Ik denk dat 96k op de grote van een exe niet veel uitmaakt maar dat is een persoonlijke mening.
Het is denk ik mogelijk om runtime een access db aan te maken. Ik heb applicatie's dit namelijk zien doen.

Acties:
  • 0 Henk 'm!

Verwijderd

Het is zeker mogelijk ja, Access doet het immers zelf ook. Maar dat is een stuk omslachtiger dan even als kant en klaar bestandje neerzetten, zeker wanneer je een Access 95 bestandsformaat wil.

En 96 kB maakt erg weinig uit inderdaad, zeker met Delphi applicaties die al gauw op 500 kB ~ 2 MB zitten. Dat die 96 kB toch teveel is, is de enige reden die kan bedenken om runtime de database te maken.

Acties:
  • 0 Henk 'm!

  • daanmsvl
  • Registratie: Juli 2005
  • Laatst online: 17-06-2021
Sorry voor de late reactie maar ik had internet verbindings problemen.

Het programma wat ik schrijf is een conversie-tool dat een text bestand met daarin een lijst met coordinaten moet omzetten in een drawing-file. Een drawing file is een specifiek bestand dat we hier op ons werk gebruiken om lijnen mee op de digitale kaart te zetten (routes, grenzen e.d.). Een drawing blijkt niets anders te zijn dan een MS Access database.

Dus de gebruiker moet een output file kunnen kiezen: De drawing file. Daarom moet ik een access DB maken. Een lege DB insluiten in de code is ook een oplossing maar (a) minder elegant en (b) daarvan heb ik al helemaal geen idee hoe dat moet.

De oplossing aangehaald door Thekk op about.delphi.com biedt mij geen oplossing want daar refereren ze aan een TADOXCatalog component en dat heb ik dus niet in Delphi 2005... Deze oplossing had ik zelf ook al gevonden maar dus af moeten schrijven :O

Is er wellicht een ander component wat hetzelfde kan doen voor mij? Ik ga zelf wel effe zoeken naar de oplossing om een bestand als resource in te sluiten :?

"Military intelligence is a contradiction in terms." - Groucho Marx, American Comedian, Actor and Singer, 1890-1977


Acties:
  • 0 Henk 'm!

  • hemaworst
  • Registratie: Juli 2004
  • Laatst online: 12-03-2022
he,

als je op groups.google.com zoekt op: "delphi create access database" dan krijg je tientallen bruikbare posts.

code:
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
{ Create a Microsoft Access Database file (MDB)
  pass in the complete path of the MDB file to create }
function CreateAccessMDB(Filename: string): boolean;
var
   DBEngine: OLEVariant;
   DBLocale: string;
   strbuf:   array[0..20] of char;
begin
   try
      { connect to MS Jet DB Engine... }
      DBEngine := CreateOLEObject('DAO.DBEngine.35');
      { get locale info for creating database... }
      GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_IDEFAULTLANGUAGE,strbuf,20);
      DBLocale := ';LANGID=0x'+strbuf;     { language code as C-style hex
integer (0x0809 for UK English) }
      GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_IDEFAULTCODEPAGE,strbuf,20);
      DBLocale := DBLocale+';CP='+strbuf;  { default code page (850 for UK
English) }
      GetLocaleInfo(LOCALE_USER_DEFAULT,LOCALE_IDEFAULTCOUNTRY,strbuf,20);
      DBLocale := DBLocale+';COUNTRY='+strbuf;      { country code (44 for
UK English) }

      DBEngine.CreateDatabase(Filename,DBLocale);
      Result := true;
   except
      on EOleException do
         Result := false;
         { ...may want to put an error message/help context in here... }
   end;
end;


To create a MSAccess 2000 File You have probably to substitute the line
DBEngine := CreateOLEObject('DAO.DBEngine.35');

with the one
DBEngine := CreateOLEObject('DAO.DBEngine.40');

...JET 4.0 is shipped with Office 2000.

Je moet maar ff kijken, ik denk dat je op groups.google.com zeker je antwoord vind

Hans Dorrestijn: "Want, de worstjes van de Hema zijn niet te hard of slap...De Hemaworst, hoera hoera, zit barstens vol met sap.Baby's die nu juichen aan de moederborst...Zouden harder zuigen aan de Hemaworst"


Acties:
  • 0 Henk 'm!

  • daanmsvl
  • Registratie: Juli 2005
  • Laatst online: 17-06-2021
Inderdaad ik had daar nog nooit gezocht maar nu dat ik kijk bij de discussie groepen: er staat genoeg "food for thought". Ik ga dit uitspitten, verdere reply's zijn vooralsnog niet meer nodig. Als ik vast zit open ik wel een nieuw topic. B) Dank voor de hulp tot zover _/-\o_

"Military intelligence is a contradiction in terms." - Groucho Marx, American Comedian, Actor and Singer, 1890-1977

Pagina: 1