Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   ADO-aber wie? (https://www.delphipraxis.net/128773-ado-aber-wie.html)

Schorschi_jg 5. Feb 2009 23:08

Datenbank: Access-datenbank • Version: ? • Zugriff über: Ado

ADO-aber wie?
 
Hallo
also...hab mich heut erst in dem forum registriert....und ich denke es ist wichtig dazu zusagen, dass ich erst seit kurzem mit Delphi arbeite. Außerdem arbeite ich mit einer recht alten Version(Delphi6).
Nachdem ich mich fast durch ein Buch("jetzt lern ich Delphi") durchgearbeitet hab, bin ich dabei mein erstens Programm zu schreiben...
dabei handelt es sich um ein recht einfaches Programm zur umrechnung von einigen Körpermaßen zu Konstruktionsmaßen...
Das Problem liegt bei nun bei der Arbeit mit der Datenbank...indieser würde ich gern Die umgerechneten Maße Speichern. Bisher konnte ich die Datenbank mit hilfe dieses codes erzeugen:

Delphi-Quellcode:
function CreateAccessDatabase(Database : String) : Boolean;
var
  AdoxCatalog : TCatalog;
begin
  AdoxCatalog := TCatalog.Create(nil);
  try
    AdoxCatalog.Create1('Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=5;Data Source=C:\Masskartei.mdb' );
    result := true;
  except
    result := false;
  end;
  AdoxCatalog.Free;
end;
Allerdings bin ich nun seit zwei tagen im Internet auf der Suche nach einer Art über ADO auf diese Datenbank zuzurgreifen. Dabei sind mir natürlcih einige Komponente aufgefallen, die ich dazu brauche...z.B. TABOConnection...in dem Tutorial(http://www.delphi-treff.de/tutorials...enbank/page/2/) wird beschrieben, dass man diese Komponente einfach aus dem menüpunkt "Tools" auf das Datenmodul schieben kann. ALlerdings find ich diese Komponente weder unter dem Menüpunkt tools, noch sonst irgendwo...

Kann mir einer von euch weiterhelfen?

praktisch dreht sich mein Problem im Allgemeinen um die Verbindung zur Datenbank. Wäre nett, wenn einer vllt noch einmal kurz und knapp umschreiben könnte, welche schritte ich vornehmen muss, um überhaupt eine richtige Verbindung zu einer Datenbank aufnehmen und mit dieser arbeiten zu können, bzw um in ihr werte Speichern zu können.

[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]

Jens Hartmann 5. Feb 2009 23:24

Re: ADO-aber wie?
 
Hallo erstmal,

ich habe das selbe Problem gehabt wie du. Ich habe vor kurzem meine erste Datenbank in Access geschrieben und diese mit Delphi abgefrage und bearbeitet.


Als erstes habe ich mit den Query und Table Komponenten gearbeitet und mir einen Datenbanknavigator dazu geholt.

Damit kannst du schon fast alles an deiner Datenbank bearbeiten.

Als nächstes habe ich mir externe DBEdit und so in mein Formular gelegt und über diese meine Funktionen Stück für Stück erweitert.

Ich weiß das ist nicht viel was ich Dir sagen kann, ich hoffe aber das es Dir ein bißchen weiterhelfen tut.

MFG


Jens

BullsEye 5. Feb 2009 23:29

Re: ADO-aber wie?
 
Hallo und Willkommen in der DP! :dp:

Ist jetzt zwar nicht direkt zu deinem Datenbankproblem aber vllt hilfts trotzdem.

Delphi-Quellcode:
AdoxCatalog.Create1('Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=5;Data Source=C:\Masskartei.mdb' );
Kleiner Tip: Du solltest nie einen so direkten Pfad angeben! Unter Vista und Win 7 hast du z.B. keine Rechte direkt auf C:\ zu schreiben! Entweder schreibste nur den Namen der Datei rein "Masskartei.mdb" dann holt er sich das eigentlich aus dem Ordner, in dem deine Anwendung liegt oder du machst das mit "ExtractFilePath".

Wenn es jetzt nur ums Speichern geht und nicht darum, mit einer Datenbank zu arbeiten, kannst du die Daten auch in einer INI-File speichern.

sx2008 6. Feb 2009 01:22

Re: ADO-aber wie?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zunächst brauchst du eine TADOConnection:
Delphi-Quellcode:
// ConnectionString setzen
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Masskartei.mdb';
// Verbindung zur Datenbank herstellen
ADOConnection1.Connected := True;
Du nimmst eine TADOQuery und setzt die Connection auf ADOConnection1.
Das Property SQL setzt du z.B. auf
SQL-Code:
SELECT * FROM KomponentenTabelle
und dann einfach das Property Active auf True setzen.
Das setzt natürlich vorraus, dass es eine Access-Datenbank mit dem richtigen Namen und Pfad auf deinem Rechner gibt und dass dort eine Tabelle mit dem Namen "KomponentenTabelle" enthalten ist.

Im Anhang ist ein kleines Demoprojekt mit passender Access-Datenbank.

Thomas F 6. Feb 2009 07:08

Re: ADO-aber wie?
 
Zitat:

Zitat von Schorschi_jg

Allerdings bin ich nun seit zwei tagen im Internet auf der Suche nach einer Art über ADO auf diese Datenbank zuzurgreifen. Dabei sind mir natürlcih einige Komponente aufgefallen, die ich dazu brauche...z.B. TABOConnection...in dem Tutorial(http://www.delphi-treff.de/tutorials...enbank/page/2/) wird beschrieben, dass man diese Komponente einfach aus dem menüpunkt "Tools" auf das Datenmodul schieben kann. ALlerdings find ich diese Komponente weder unter dem Menüpunkt tools, noch sonst irgendwo...
Kann mir einer von euch weiterhelfen?

praktisch dreht sich mein Problem im Allgemeinen um die Verbindung zur Datenbank. Wäre nett, wenn einer vllt noch einmal kurz und knapp umschreiben könnte, welche schritte ich vornehmen muss, um überhaupt eine richtige Verbindung zu einer Datenbank aufnehmen und mit dieser arbeiten zu können, bzw um in ihr werte Speichern zu können.

Herzlich willkommen im Delphi-Forum

Die ADO-Komponenten befinden sich bei mir unter "dbGo" , kann aber sein, dass du keine ADO hast.
Du könntest dir eine neue Turbo-Delphi-Version runterladen, natürlich kostenlos, allerdings neuer als deine Version.
Die findest du hier ----> http://www.delphi-treff.de/backstage.../turbo-delphi/

Für eine Verbindung zu einer Datenbank brauchst du noch eine DataSource-Komponente ("Datenzugriff")und eine DBGrid , um die Daten anzuzeigen.


Wenn du eine einfache Datenbank erstellen willst, dann ist das mit MyBase einfacher, und du brauchst kein ADO

Hier das Tutorial ----> http://www.delphi-treff.de/tutorials...en-mit-mybase/

nahpets 6. Feb 2009 10:20

Re: ADO-aber wie?
 
Hallo und Willkommen,

bei Delphi 6 (Enterprise) gibt es einen Komponentenreiter ADO, da sind alle von Dir benötigten Komponenten für den Datenbankzugriff enthalten.

Schorschi_jg 6. Feb 2009 18:39

Re: ADO-aber wie?
 
nja...ich hab nur ne Schulversion, die ich von unserer Schule bekommen hab...und da gibts auch den Komponentenreiter nicht. Hab mir jetzt TurboDelphi (Explorer) runtergeladen und hoffe mal, dass ich damit weiter komme.

aber schonmal viel Dank für die zahlreichen Antworten...

Schorschi_jg 8. Feb 2009 19:36

Re: ADO-aber wie?
 
Hallo zusammen

Also ich hab mir jetzt Turbo Delphi Explorer installiert und da auch soweit eig alles gefunden, also TADOconnection usw. Allerdings hab ich nun das Problem, dass der folgende Programmcode nicht mehr funktioniert:
Delphi-Quellcode:
function CreateAccessDatabase(Database : String) : Boolean;
var
  AdoxCatalog : TCatalog;
begin
  AdoxCatalog := TCatalog.Create(nil);
  try
    AdoxCatalog.Create1('Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=5;Data Source=C:\Datenbank.mdb' );
    result := true;
  except
    result := false;
  end;
  AdoxCatalog.Free;
end;
Als Fehlermeldungen wird immer Angegeben:

[Pascal Fehler] Unit1.pas(54): E2003 Undefinierter Bezeichner: 'TCatalog'

Außerdem unterstreicht er immer das Create und das Free...ich denke, dass liegt daran, dass mir die Unit fehlt oder? Jedenfalls hab ich unter Delphi 6 in der Typenbibliothek die Unit ADOX_TLB hinzugefügt, mit der ich dann die Funktion auch ausführen konnte...
Hab leider keine Lösung für das Probllem gefunden....kann mir einer von euch weiterhelfen?

MfG, schorschi_jg

[edit=alzaimar]Delphi-Tags eingefügt. Mfg, alzaimar[/edit]

Schorschi_jg 9. Feb 2009 15:21

Re: ADO-aber wie?
 
ok...das hat sich soweit erledigt...
allerdings steh ich nun vor dem nächsten Problem....wie kann ich die Datenbank einrichten? Also wie kann ich eine Tabelle erstellen, in der Informationen gespeichert werden können und was muss ich dabei alles beachten?...bin leider ein ziemlicher neuling auf dem Gebiet, aber wäre echt nett, wenn mir einer von ecuh da weiterhelfen könnte

sx2008 9. Feb 2009 23:56

Re: ADO-aber wie?
 
Zitat:

Zitat von Schorschi_jg
...wie kann ich die Datenbank einrichten?

Mit MS Access 2000/2003 oder 2007 geht das am Einfachsten.
Wenn du kein MS Access hast, dann solltest du dich vielleicht nach einer anderen DB umschauen.
Es ist ganz wichtig, dass du ein visuelles Tool hast, um unabhängig von Delphi deine Datenbank betrachten und manipulieren zu können.
Lesestoff: http://support.microsoft.com/kb/209534/de

Schorschi_jg 10. Feb 2009 10:11

Re: ADO-aber wie?
 
Ja das werd ich mir mal zulegen....aber hab mal ein bissel rumexperimentiert...und hab gemerkt, dass man bei der DataSource Komponente neue Felder hinzufügen kann und die dann den Columns eines DBGrids zuweisen kann...da ich mehrere Tabellen in der Datenbank haben wollte, hab ich einfach noch dementsprechend mehrere DBGrids Komponente eingefügt und so meine Tabellen erstellt...is das so richtig?...es wurde zumindest noch keine Fehlermeldung angezeigt....
wobei ich nun natürlich auch wieder vor dem nächsten Problem stehe...ich weis nicht, wie man nun Daten in diesen Tabellen speichern und abrufen kann...

sirius 10. Feb 2009 10:21

Re: ADO-aber wie?
 
du solltest dich anscheinend mal dringend mit Datenbanken und SQL beschäftigen. Ansonsten kommen wir hier nicht vorwärts.

Schorschi_jg 10. Feb 2009 12:56

Re: ADO-aber wie?
 
Ja sicher...nja...zugegebener maßen hab ich erst am 6. dezember 2008 angefangen delphi zu "lernen". Das heißt, ich habe angefangen ein buch über delphi zu lesen....Allerdings werden in dem Buch keine Datenbanken behandelt. Ich mir bin durchausbewusst, dass ich wahrscheinlich sehr grundlegende Fehler mache....aber das ist nunmal mein erstes Programm das ich überhaupt schreibe...und Delphi ist die erste Sprache, die ich überhaupt lerne...

Jedenfalls hab ich mich im Internet jetzt noch ein bissel über Datenbanken informiert...und bin dabei auf Relationale Datenbanken gestoßen. Soweit ich das verstanden hab, handelt es sich dabei um verschiedene Tabellen, die man innerhalb einer Datenbank anlegen und mit einander verknüpfen kann. Das geschieht, soweit ich das verstanden hab über einen Primärschlüssel.

Die Tabellen würde ich gern über das Programm selbst anlegen, für den Fall, dass der user kein Access hat, bzw damit nicht umgehen kann. Außerdem will ich so vorbeugen, dass ein Programmfehler auftritt, wenn die Datenbank nicht vorhanden ist, da sie in dem Fall vom Programm selbst erstellt wird.

wie die DAtenbank erstellt wird weis ich inzwischen, aber wie ich da nun Tabellen erstellen kann, konnte ich noch nicht herausfinden...wäre echt nett, wenn mir vllt jemand ein link oda irgwas geben könnte...

sirius 10. Feb 2009 13:08

Re: ADO-aber wie?
 
Prinzipiell reagieren (die meisten) Datenbanken auf SQL.
Du kannst also immer eine Query nehmen und mittels SQL die Tabellen erstellen. Das SQLKommando übergibst du in den dazugehörigen String (die Eigenschaft der Komponente heißt meist SQL). Der sieht etwa so aus "Create Table tabellenname..."
SQL-Code:
CREATE TABLE "Meine_Tabelle"
("ID" NUMBER(10) NOT NULL,
"NAME" VARCHAR2(40) NOT NULL,
"BETRAG" FLOAT(32),
PRIMARY KEY("ID"));
Die Syntax dazu findest du im Internet.
Ich weis nicht, ob es Delphi-Komponenten gibt, die das übernehmen. Kann sein. Ich arbeite lieber direkt.

delphifan2004 10. Feb 2009 14:51

Re: ADO-aber wie?
 
Hallo,

ich seh grad diesen Thread hier und hab in mein soeben runter geladenes und inzwischen installiertets Turbo Delphi geguckt. Wo finde ich die Klasse TCatalog?

Unter Ado auf jeden Fall nicht.

Wollte ne kleine Datenbank mit ADO bauen. Habe mir aus dem Delphi Treff das Handbuch gesaugt und will es nachvollziehen. Beim Stöbern im Netz hab ich nun diesen Thread entdeckt. Wo also ist TCatalog zu finden und was kann diese Klasse?

Schorschi_jg 10. Feb 2009 16:26

Re: ADO-aber wie?
 
hey na
ja...sorry...hab vergessen die Lösung für das problem dazuzuschreiben...hab ja selber gemerkt, dass die Funktion zum erstellen einer *.mdb datei so nicht funktioniert....stattdessen nutze ich jetzt diese funktion:

Delphi-Quellcode:
function CreateAccessDatabase(DBName : String) : Boolean;
var
   ADOxCatalog: Variant ;
begin
   ADOxCatalog :=CreateOleObject ('ADOX.Catalog');
 try
   ADOxCatalog.Create('Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=5;Data Source='+ DBName+'.mdb');
   result:= true;
 except
  result:= false;
 end;
end;

Allerdings musst du bei uses noch die Unit comobj angeben. Dann sollte das Funktionieren..tuts bei mir zumindest;)

TCatalog konnt ich unter Delphi 6 noch in der Typenbibliothek hinzufügen...bzw eher die ADO_TLB unit, in der TCatalog enthalten war...unter Turbo Delphi konnte ich diese Unit allerdings auch nicht mehr finden und somit auch TCatalog nicht mehr verwenden....

[edit=mkinzler]Tag korrigiert Mfg, mkinzler[/edit]

sirius 10. Feb 2009 16:29

Re: ADO-aber wie?
 
Du kannst dir aber auch die TybBibliothek erstellen, wenn du nicht über Variant gehen willst.
Unter TDE geht das leider nicht übers Menu, aber die tlibimp.exe findest du irgendwo im bin-Verzeichnis und eine Anleitung dazu war hier in der DP.

Edit: und die DLL dazu ist MSADOX.dll

Edit2: von hier aus dem Forum (damit alles bei einander ist)
Zitat:

Die Parameter sind praktisch selbsterklärend, ich benutze meist folgendes:

tlibimp.exe -P+ -D<Pfad> -Hpa<name> -Hps<name> <exename>

<Pfad> ist das Verzeichnis in dem die *_TLB.pas abgelegt werden soll.
<name> ist der Name der Komponentenpalette auf der die Sachen aus der Typelib später zu finden sein sollen.
<exename> ist der Name der Datei die die Typelib enthält. Also der Exe, Dll, Ocx, tlb, usw.
Das hpa und hps kannst du bei TDE weglassen.

Schorschi_jg 10. Feb 2009 19:00

Re: ADO-aber wie?
 
also hab das jetzt mit dem SQL-Code gemacht...funktioniert echt gut
hab außerdem noch ein recht hilfreichen link, wie ich finde...falls jemand mal das selbe problem hat und noch nie was mit SQL geschrieben bzw sonst irgwie zu tun hatte...

SQL-Syntax

ist zwar für fortgeschrittene bestimmt etwas dürftig aber mir hats schonmal geholfen :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:24 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 by Thomas Breitkreuz