Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbankzugriff zwischen Delphi und Oracle (https://www.delphipraxis.net/140228-datenbankzugriff-zwischen-delphi-und-oracle.html)

Major1337 14. Sep 2009 07:44

Datenbank: Oracle • Zugriff über: ODAC

Datenbankzugriff zwischen Delphi und Oracle
 
Hey,
ich bin auf der Suche nach einer ausführlichen Anleitung mit der ich unter Delphi einen Datenbankzugriff
auf Oracle machen kann. (ODAC) Habe selbst schon im Netz nach einem Tutorial gesucht, aber leider nicht das passende gefunden.
Vielleicht könnt ihr mir ja weiterhelfen. ;-)

Gruß
major1337

Sherlock 14. Sep 2009 07:49

Re: Anleitung für Oracle in Delphi
 
Also großartige Unterschiede zu anderen DBs gibt es bei Oracle nicht.
Es kommt halt darauf an, ob Du den Zugriff selbst ausprogrammieren möchtest, oder mit Fremdkomponenten drauf willst.

Für letzteren Fall empfehle ich die DOAs von AllroundAutomations, die sind wirklich zuverlässige kleine Biester.

Sherlock

Major1337 14. Sep 2009 07:53

Re: Datenbankzugriff zwischen Delphi und Oracle
 
Ich möchte mit TOraSession u TSmartQuery einen Zugriff machen.

Sherlock 14. Sep 2009 08:03

Re: Datenbankzugriff zwischen Delphi und Oracle
 
Also hast Du schon Komponenten, gut.
In TOracleSession trägst Du die Zugriffsinfos ein, dH. ConnectString und Login. Die Query wird mit der Session verbunden und mit SQL bestückt. Fertig. Alles kein Hexxenwerk.

Sherlock

Major1337 14. Sep 2009 08:19

Re: Datenbankzugriff zwischen Delphi und Oracle
 
Okay, der Zugriff klappt nun endlich. ^^

Ich möchte aber jetzt über Eingabefelder entweder neue Datensätze anlegen, überschreiben oder löschen.
Dafür gibt es ja die tollen Befehle wie update oder insert. Finde aber keine Seite wo das so genau erklärt wird, wie man die Parameter die man durch das Editfeld bekommt mit der SQL in Verbindung bringt.

Sherlock 14. Sep 2009 08:32

Re: Datenbankzugriff zwischen Delphi und Oracle
 
Also ich kenne Deine Komponenten nicht und weiss jetzt grad nicht, was Du mit Editfeldern meinst, aber Variablen kannst Du in Orcale über einen ":" kennzeichnen. Beispiel:
SQL-Code:
select name, gebdatum from mitarbeiter
where vorname = :name
Die Variable ":name" declariert werden mit irgendwas in der Form
Delphi-Quellcode:
Query.DeclareVariable('name', otString);
Gefüllt mit:
Delphi-Quellcode:
Query.SetVariable('name', 'Dieter');
Meinst Du sowas?

Sherlock

mikhal 14. Sep 2009 08:36

Re: Datenbankzugriff zwischen Delphi und Oracle
 
Bei der Installation der ODAC-Komponenten wird auch ein Verzeichnis mit Beispielen angelegt (Demos), schau dir die zuerst mal an. Darüber hinaus ist die Hilfe für die ODAC-Komponenten recht ausführlich (in der Entwicklungsumgebung unter dem Menü Oracle zu finden).

Grüße
Mikhal

Major1337 14. Sep 2009 09:03

Re: Datenbankzugriff zwischen Delphi und Oracle
 
Okay, danke! Es geht mit ParamByName. Habe aber npch eine weitere Frage

Delphi-Quellcode:
 SmartQuery1.sql.add('select a.rowid, a. * from sqlbase a where klassenstuffe = ''13''');
Könnt ihr mir erklären für was was dieses a.rowid, a steht? Habe gehört das es ein Alias für ... ist, aber richtig verstanden habe ich es nicht.

peterlepan 14. Sep 2009 09:07

Re: Datenbankzugriff zwischen Delphi und Oracle
 
Hi!

Intern führt die Oracle-Datenbank für jeden Datensatz eine eindeutige Adresse mit, das ist die ROWID. Darüber klappt der eindeutige Zugriff auf einen Datensatz, auch wenn kein Primärschlüssel vorhanden sein sollte.

p.

Sherlock 14. Sep 2009 09:08

Re: Datenbankzugriff zwischen Delphi und Oracle
 
Die RowID...aaaalso:

http://www.adp-gmbh.ch/ora/concepts/rowid.html

;)

Sherlock

blema 16. Feb 2015 22:08

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Hi, ich muss eine Schnittstelle mit Delphi programmieren und auf die oracle-DB zugreiffen.

Ich habe z.B. für Access-DB: ADO-Connection, ADOQuery und DataSet benutzt, aber für oracle funktioniert das nicht!

Könnt ihr mir sagen, welche Komponenten muss ich für den Zugriff auf oracle-DB benutzen?

Danke.

VG
blema

Aviator 16. Feb 2015 22:53

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Du könntest es mal mit den Zeos Komponenten versuchen. Das wäre mein erster Gedanke in die Richtung. Ob es funktioniert weiß ich nicht. Habe noch nie mit Oracle gearbeitet.

Bernhard Geyer 17. Feb 2015 06:23

AW: Re: Anleitung für Oracle in Delphi
 
Zitat:

Zitat von Sherlock (Beitrag 951183)
Für letzteren Fall empfehle ich die DOAs von AllroundAutomations, die sind wirklich zuverlässige kleine Biester.

ODAC würde ich (für länger laufende Anwendungen) nicht mehr empfehlen. Mehr als mini-Anpassungen an neue Delphi-Versionen machen die nicht mehr. Und das auch nur noch mehr schlecht als recht.
Sollte Oracle mal die API größer ändern wird es fraglich sein ob man hier noch Zeitnah eine Lösung bekommt.
Für Oracle ist als Kaufkomponente eher DevArt zu empfehlen (oder natürlich Zeos). Falls man die richtige Delpi-Edition hat dürfte auch FireDAC ganz gut sein.

jobo 17. Feb 2015 07:34

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Zitat:

Zitat von blema (Beitrag 1290114)
Ich habe z.B. für Access-DB: ADO-Connection, ADOQuery und DataSet benutzt, aber für oracle funktioniert das nicht!

Die funktionieren auch mit Oracle.
Dazu musst Du mit dem Oracle Client den Oracle OLEDB Provider installieren (nicht den von MS)
Der ODAC ist eine Paketinstallation, die auch den OLEDB Provider installiert. Hab ich aber noch nie wirklich genutzt.
Um den OLEDB Provider zu installieren, muss man entweder den "Fat" Client von Oracle einsetzen (einige hundert MB im Download) oder den Instant Client, hab ich hier glaub ich "neulich" noch irgendwo hier verlinkt.

Bernhard Geyer 17. Feb 2015 07:39

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Zitat:

Zitat von jobo (Beitrag 1290129)
Um den OLEDB Provider zu installieren, muss man entweder den "Fat" Client von Oracle einsetzen (einige hundert MB im Download) oder den Instant Client, hab ich hier glaub ich neulich noch irgendwo verlinkt.

Der Instant Client beinhaltet kein OleDB-Treiber. Ich würde aber kein OLEDB verwenden sondern einen native Client wie von DevArt. Der kommt auch wenn man ihn entsprechend konfiguriert komplett ohne Oracle-SW auf dem Client aus (was die Pflege und Wartungskosten auf den Rechnern reduziert da Oracle-SW bei uns Clients schon öfter kaputt gemacht hat)

jobo 17. Feb 2015 07:56

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1290130)
Der Instant Client beinhaltet kein OleDB-Treiber.

Richtig, hab ich verdrängt, läuft schon ewig bei mir.
Nach der Instantclientinstallation muss der OLEDB Provider separat aus dem ODAC Paket installiert werden.
Das ist eine Befehlszeile:
Code:
install.bat oledb .. (je nach Konfiguration)
P.S: Mir ist auch gerade eingefallen, warum ich das getrennt gemacht habe. Man kann auch gleich alles aus dem ODAC installieren. Der Instant Client ist aber aktueller. Also nehm ich nur den OLEDB Provider aus dem ODAC.

blema 17. Feb 2015 11:48

AW: Datenbankzugriff zwischen Delphi und Oracle
 
ich habe mit diese Komponenten versucht, aber es klappt immer noch nicht?!
  • FDConnection
  • FDQuery

Blup 17. Feb 2015 12:06

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Auf diese umfassende Fehlerbeschreibung kann man eigentlich nur mit einer Komplettanleitung antworten:

http://docwiki.embarcadero.com/RADSt..._%28FireDAC%29

War übriegens der erste Treffer wenn man "firedac oracle" bei Google eingibt...

blema 17. Feb 2015 13:29

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Zitat:

Zitat von Blup (Beitrag 1290176)
Auf diese umfassende Fehlerbeschreibung kann man eigentlich nur mit einer Komplettanleitung antworten:

http://docwiki.embarcadero.com/RADSt..._%28FireDAC%29

War übriegens der erste Treffer wenn man "firedac oracle" bei Google eingibt...

Ich habe bereits OracleClient auf mein Rechner installiert. und die TNSNAMES.ORA auch in dem entsprechenden Ordner reinkopiert.
Code:
HSNRDB=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 1x.1x.x.xx)(PORT = 1521))
    )
    (CONNECT_DATA = (sid = hsnrdb))
  )
so ähnlich sieht das aus...habe paar sachen geändert

jobo 17. Feb 2015 13:42

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Zitat:

Zitat von blema (Beitrag 1290174)
ich habe mit diese Komponenten versucht, aber es klappt immer noch nicht?!

Ist das eine Frage oder eine Feststellung?
Wie auch immer. Was klappt denn nicht?
Der Delphicode?
Der Oracle Zugriff?

Hier ist niemand hellseher, wenn Du Hilfe haben möchtest, dann musst Du etwas präziser werden.

blema 17. Feb 2015 13:53

AW: Datenbankzugriff zwischen Delphi und Oracle
 
ich habe nur kurz beschrieben, wie ich vorgegangen bin und das sollte eine Antwort an Blup...

wie auch immer, der Oracle-Zugriff klappt's immer noch nicht...

jobo 17. Feb 2015 14:01

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Erstmal schauen, ob der Oracle Zugriff generell funktioniert.
z.B. mit TOAD in Deinem Fall (die Zugriffsverfahren da kenn ich nicht)
dann Zugriff für Deinen Bedarf prüfen
falls es ADO ist, ist ein funktioierender ODBC Zugriff nicht ausreichend
ADO geht über OLEDB
eine ADO Verbindung kannst Du bspw. mit einer UDL Datei prüfen.
Wenn Du andere Techniken einsetzt, ZEOS bspw. brauchst Du glaube ich kein ADO/OLEDB.

Und wie gesagt "Oracle Zugriff geht nicht" kann man fast nichts mit anfangen. Es kann vieles sein. Also genau beschreiben, was nicht geht, am besten eine Fehlermeldung liefern oder auch einen Screenshot, wenn es keine Fehlermeldung gibt.

blema 17. Feb 2015 14:30

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zugriff von Delphi auf die Oracle
Beispiel:
1. ADOCOnnection -> ConnectionString -> Aufbauen -> Provider: Microsoft OLE DB Provider for Oracle -> Verbindung: Servername, Benutzername und Kennwort eingeben -> Verbindung Testen.
Anhang 42579

VG blema

blema 17. Feb 2015 14:32

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zugriff von Delphi auf Oracle
2. FireDAC:
  • DriverID: Ora
  • Database: mydb123
  • UsernName: user
  • Password: pswd
so in etwa

jobo 17. Feb 2015 14:39

AW: Datenbankzugriff zwischen Delphi und Oracle
 
hm, 2 verschiedene TNS Fehlermeldungen, aber Du gehst auf die gleiche DB?
Kommst Du mit irgendeinem Tool auf die Datenbank?
Kommst Du mit TOAD auf die Datenbank?
Kommst Du per UDL File auf die Datenbank?
Gibt es andere Oracle Installationen auf dem Rechner?
Stehen verschieden Oracle Pfade in der Path Variable?
Hast Du sqlplus oder tnsping installiert?
Wie ist der Datenbankname und wie ist der TNS Name?

Sherlock 17. Feb 2015 14:41

AW: Datenbankzugriff zwischen Delphi und Oracle
 
TNS ist nicht korrekt konfiguriert. Liegt vermutlich daran, daß Du da eine tnsnames.ora herumkopiert hast. Was liegt denn unter
Delphi-Quellcode:
"OraInstallDir"\product\"Version"\client\network\admin
?

Sherlock

blema 17. Feb 2015 14:49

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von jobo (Beitrag 1290219)
hm, 2 verschiedene TNS Fehlermeldungen, aber Du gehst auf die gleiche DB?
Kommst Du mit TOAD auf die Datenbank?
...
Gibt es andere Oracle Installationen auf dem Rechner?
Stehen verschieden Oracle Pfade in der Path Variable?
Hast Du sqlplus oder tnsping installiert?
Wie ist der Datenbankname und wie ist der TNS Name?

- Auf die Datenbank kann ich mit TOAD Problemlos zugreifen.
- Die DB-Name und TNS-Name sind unterschiedlich
- es gibt OraClient 11g home_1 und home_2... home_1 wird benutzt

blema 17. Feb 2015 14:58

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Sherlock (Beitrag 1290220)
TNS ist nicht korrekt konfiguriert. Liegt vermutlich daran, daß Du da eine tnsnames.ora herumkopiert hast. Was liegt denn unter
Delphi-Quellcode:
"OraInstallDir"\product\"Version"\client\network\admin
?
Sherlock

Die tnsnames.ora habe ich von der Firma bekommen und sollte ich konfigurieren.
Code:
C:\u01\app\oracle\product\11.2.0\client_1\network\admin
so, hier habe ich die tnsnames.ora reinkopiert.

Mit Toad hat diese konfiguration sofort funktioniert.

VG blema

jobo 17. Feb 2015 15:03

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Lass Dir bitte mal die Umgebungsvariablen anzeigen.
DOS Box
>set

Von der Ausgabe bitte die Pfadvariable, Variablen mit ORA und die Variable TNS_ADMIN hier posten.

blema 17. Feb 2015 15:45

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Zitat:

Von der Ausgabe bitte die Pfadvariable, Variablen mit ORA und die Variable TNS_ADMIN hier posten.
tnsnames.ora kopiert in
Code:
C:\u01\app\oracle\product\11.2.0\client_1\network\admin
Code:
C:\u01\app\oracle

jobo 17. Feb 2015 17:33

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Zitat:

Zitat von blema (Beitrag 1290221)
Zitat:

Zitat von jobo (Beitrag 1290219)
hm, 2 verschiedene TNS Fehlermeldungen, aber Du gehst auf die gleiche DB?
Kommst Du mit TOAD auf die Datenbank?
...
Gibt es andere Oracle Installationen auf dem Rechner?
Stehen verschieden Oracle Pfade in der Path Variable?
Hast Du sqlplus oder tnsping installiert?
Wie ist der Datenbankname und wie ist der TNS Name?

- Auf die Datenbank kann ich mit TOAD Problemlos zugreifen.
- Die DB-Name und TNS-Name sind unterschiedlich
- es gibt OraClient 11g home_1 und home_2... home_1 wird benutzt

Das Bild bringt nichts, es geht um die komplette Path Variable. Bitte mit "set" in einem cmd Window alle Umgebungsvariablen ausgeben lassen.
Hast Du nun tnsping oder nicht? Auch das kannst Du per cmd einfach aufrufen, wenn es installiert ist (Deine aktuellen Angaben, sehen so aus, dass es installiert sein könnte > Fat Client)

borwin 17. Feb 2015 19:56

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Ich verwende für den Zugriff auf Oracle die Komponenten von Devart (ODAC)
Die besitzen auch die Möglichkeit direkt (direct access) auf eine Oracle- Datenbank zuzugreifen.
Hierzu benötigt man auf dem PC KEINEN Client von Oracle und damit auch nicht die TNS_NAMES.ORA . Man erspart sich viel Arbeit bei der Verteilung auf die Zielrechner. Ansonsten verwendet man die üblichen Komponenten von Delphi für die Datenbankverwaltung.
Ich verwende nur noch diesen Weg.
Übrigens kann man diesen Weg auch beim TOAD gehen.

Gruß Borwin

jobo 18. Feb 2015 06:01

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Auch mit Oracle Client benötigt man nicht unbedingt den tnsnames Kram.
Man kann z.B. EZConnect verwenden.
Im vorliegenden Fall (Praktikum) wird man wahrscheinlich keine Zusatzkomponenten anschaffen.

blema 18. Feb 2015 10:27

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von jobo (Beitrag 1290248)
Das Bild bringt nichts, es geht um die komplette Path Variable. Bitte mit "set" in einem cmd Window alle Umgebungsvariablen ausgeben lassen.
Hast Du nun tnsping oder nicht? Auch das kannst Du per cmd einfach aufrufen, wenn es installiert ist (Deine aktuellen Angaben, sehen so aus, dass es installiert sein könnte > Fat Client)

Ich hoffe, dass man das lesen kann.

VG blema

jobo 18. Feb 2015 11:20

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Man bekommt etwas Augenkrebs, aber ich sehe mindestens 4 Einträge, darunter ein Client und ein Server (XE)
Kleiner Tipp: Auch in den CMD Fenstern kann man mit Copy und Paste arbeiten, dann erhält man Text, den man im Editor bequem durchsuchen kann.
Starte bitte in einem solchen Fenster den Befehl TNSPING gefolgt vom TNS Datenbanknamen. Der Befehl gibt dann die verwendete TNSNAMES Datei an, die er zur Namensauflösung verwendet und das Ergebnis des Ping Tests.
Also
>TNSPING HSNRDB

Die angezeigte TNSNAMES Datei (Pfad und Dateiname) ist die, die Deinen Eintrag enthalten sollte. Wenn Du kein OK bekommst, brauchst Du gar nicht erst mit Delphi anzufangen.

Wenn Du sowieso die komplette DB installiert hast, brauchst Du keine extra Clientinstallation. Kannst Du eigentlich theoretisch alles rauswerfen, also deinstallieren. Ich weiß leider nicht auswendig, ob die XE Installation auch mit OLEDB Treiber kommt. Aber eins nach dem anderen, erstmal TNSPING Ergebnis anschauen.

blema 18. Feb 2015 11:49

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Hi,

mit folgende Komponenten konnte ich eine Verbindung zur Oracle-DB erstellen ... yes
  • SQLConection
  • SQLQuery
wenn ich aber die Daten aus der DB anzeigen möchte (unter SQLQuery habe ich Datenmenge auf 20 reduziert), wird folgender Fehler angezeit:
Code:
Diese Operation ist bei einer unidirektionalen Datenmenge nicht gestattet.
Ich benutze DataSource und DBGrid.


Vielen Dank an alle...
blema

blema 18. Feb 2015 12:31

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Hallo,

inzwischen funktioniert der Zugriff auf OracleDB auch mit:
  • FDConnection und
  • FDQuery

ich kann mir auch Datensätze auf DBGrid anzeigen lassen.

Vielen Dank noch mal an alle...

VG blema

p80286 18. Feb 2015 22:39

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Es wäre schön, wenn Du jetzt noch schreiben würdest was Du unternommen hast, damit alles funktioniert. Vielleicht hat demnächst jemand anderes das gleiche Problem, dem wäre dann damit geholfen.

Gruß
K-H

blema 19. Feb 2015 09:26

AW: Datenbankzugriff zwischen Delphi und Oracle
 
Zitat:

Zitat von p80286 (Beitrag 1290517)
Es wäre schön, wenn Du jetzt noch schreiben würdest was Du unternommen hast, damit alles funktioniert. Vielleicht hat demnächst jemand anderes das gleiche Problem, dem wäre dann damit geholfen.

Gruß
K-H

ok, da hast Du recht. Sorry.

Delphi Komponenten:
  • FDConnection: richtige Parameter auswählen, sonst funktioniert nicht(so wie bei mir). Vorher habe ich natürlich
    Code:
    Oracle-Client v11
    installiert und die Datei
    Code:
    tsnames.ora
    in den richtigen Ordner reinkoppiert, z.B.
    Code:
    C:\u01\app\oracle\product\11.2.0\client_1\network\admin
    1. DriverID: Ora
    2. Database: 1x.1x.x.xx:1521/HSNRDB
    3. UserName: user
    4. password: xxxx
  • FDQuery:
    1. FDConnection
    2. SQL: SQL-String: z.B. select * from KUNDE where rownum<=20
  • DataSource: DataSource mit FDQUery verbinden
  • DBGrid zur Datenkontrolle


VG blema


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

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