Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi einfache Datenbankanwendung ODBC SQL (https://www.delphipraxis.net/112114-einfache-datenbankanwendung-odbc-sql.html)

raena 15. Apr 2008 12:55

Datenbank: SAP DB • Version: 7.4 • Zugriff über: ODBC

einfache Datenbankanwendung ODBC SQL
 
Hallo zusammen,

ich suche einen einfachen Einstieg bzgl. DB Abfrage über SQL.

Ich will einfach ein beliebigs SQL Statement (select, update, inset, d...)
auf eine beliebige DB absetzen, die über ODBC erreichbar ist.
Falls es ein Select Statement ist, soll das Erbebnis in einer Liste angezeigt werden.

Die Connection zur Datenbank über TADOConnection konnte ich konfigurieren.
Aber dann verliessen sie ihn.

Kann jemand helfen? Danke, Raena.
:thumb:

mkinzler 15. Apr 2008 12:57

Re: einfache Datenbankanwendung ODBC SQL
 
Wie wäre es mit einem TADODataSet?

raena 15. Apr 2008 13:10

Re: einfache Datenbankanwendung ODBC SQL
 
ok, ich habe ADODATAset eingebunden, verbunden mit ADO Connection und in Command Text ein
SQL eingetragen.
Wie kriege ich jetzt die Werte in eine Liste?

mkinzler 15. Apr 2008 13:12

Re: einfache Datenbankanwendung ODBC SQL
 
Du kannst die Komponente entwder per DataSource mit einer datensesitiven Komponente verbinden oder mit .First .Next durchsteppen

Bernhard Geyer 15. Apr 2008 13:27

Re: einfache Datenbankanwendung ODBC SQL
 
Bedenke das viele Firmen nur den Zugriff auf eine SAP-DB nur über die Offizielle SAP-Schnittstelle erlauben :!: Zugriff auf die DB mittels ODBC/... ist verboten und könnte dir gewaltig viel Ärger bereiten. Also bitte erst in der (SAP-)IT-Abteilung nachfragen ob du über diesen Weg zugreifen darfst. Maximal wird dir hier der Lesezugriff erlaubt. Denn wenn du mal versehentlich einen Datensatz zu viel löschen/ändern würdest könntest du viel zu viel Schaden anrichten.

raena 15. Apr 2008 14:08

Re: einfache Datenbankanwendung ODBC SQL
 
prinzipielle funktioniert das Ganze jetzt. Ich habe nur ein Problem.

Der Wert ADODataSet1.Active:=true; sollte ja true sein damit was angezeigt wird.
Wenn ich die SQL aendere, wird der Wert automatisch auf false gesetzt.
Deswill ich den Wert im Quell Code automatisch true setzen. Da stürzt die Kiste aber ab.

Raena.

Delphi-Quellcode:
unit DBtest;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ADODB, Grids, DBGrids, DB;

type
  TForm2 = class(TForm)
    ADOConnection1: TADOConnection;
    ADODataSet1: TADODataSet;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
  testervar:integer;
  ADODataSet1:TADODataSet;
implementation

{$R *.dfm}
begin

testervar:=33;
ShowMessage('tma ' + inttostr(testervar));
ADODataSet1.Active:=true;
end.

Bernhard Geyer 15. Apr 2008 14:13

Re: einfache Datenbankanwendung ODBC SQL
 
Was sollen die ganzen globalen Variablen? Wieso wird ein begin...end-Block verwendet in dessen Bereich nicht initialisierte Referenzen verwendet werden.

raena 15. Apr 2008 15:25

Re: einfache Datenbankanwendung ODBC SQL
 
So, ich habe jetzt mal alles raus geschmissen was ich nicht brauche.
Das Programm läuft durch.

An welcher Stelle muss ich nun den Befehl "ADODataSet1.Active:=true;"
absetzen?

Delphi-Quellcode:
program Databaseprj;

uses
  Forms,
  DBtest in 'DBtest.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm2, Form2);
  Application.Run;

end.






unit DBtest;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ADODB, Grids, DBGrids, DB;

type
  TForm2 = class(TForm)
    ADOConnection1: TADOConnection;
    ADODataSet1: TADODataSet;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
implementation

{$R *.dfm}

end.

raena 15. Apr 2008 21:28

Re: einfache Datenbankanwendung ODBC SQL
 
scheint ja doch nicht so einfach zu sein :pale:

mkinzler 15. Apr 2008 21:39

Re: einfache Datenbankanwendung ODBC SQL
 
http://www.delphi-treff.de/tutorials...ls/katalog/31/

WS1976 16. Apr 2008 05:27

Re: einfache Datenbankanwendung ODBC SQL
 
Hallo,

du scheinst alles durcheinander zus schütteln um dann zu schauen was rauskommt.
ODBC ADO und SQL weisst du was sich dahinter verbirgt? ADO und ODBC schliessen sich fast
zwangsläufig gegenseitig aus. Dir scheint es grundsätzlich an Wissen zu fehlen.
Bitte lies dir erstmal Kinzlers Vorschlag durch. Werd dir klar was du eigentlich willst versuchs und
stell dann deine Fragen.

Grüsse
Rainer

mkinzler 16. Apr 2008 05:38

Re: einfache Datenbankanwendung ODBC SQL
 
Warum schließen sich ADO und ODBC aus? ADO ist mehr oder weniger der Nachfolger von ODBC und ermöglicht die Verwendung von ODBC-Treibern für den Zugriff auf DBMS.

Bernhard Geyer 16. Apr 2008 06:10

Re: einfache Datenbankanwendung ODBC SQL
 
Zitat:

Zitat von mkinzler
Warum schließen sich ADO und ODBC aus? ADO ist mehr oder weniger der Nachfolger von ODBC und ermöglicht die Verwendung von ODBC-Treibern für den Zugriff auf DBMS.

Sie schließen sich nicht aus aber man sollte sie vermeiden.

Als Delphi-User gibt/gab es folgende Schichtung der Zugriffstechniken

a, Anwendung -> BDE -> ODBC -> ODBC-Treiber -> Datenbank (Endgültiges Ende mit Delphi 2008 angekündigt)
b, Anwendung -> BDE -> SQL-Links -> SQL-Links-Treiber -> Datenbank (Seit Jahren abgekündigt)
c1, Anwendung -> dbGO/ADOExpress -> ADO -> OLE DB-Treiber -> Datenbank
c2, Anwendung -> dbGO/ADOExpress -> ADO -> OLE DB-Treiber für ODBC -> ODBC-Treiber -> Datenbank
d, Anwendung -> dbExpress -> dbExpress-Treiber (Teilweise Zugriff auf OLE DB je nach DBMS) -> Datenbank ->
e, Anwendung -> native Zugriffskomponenten (ZEOS, CoreLabs, AnyDac) (-> teilweise native Treiber) -> Datenbank


Je länger (Anzahl der Zwischenstufen) desto höher sind di Konfigurationsaufwände und desto höher die Wahrscheinlichkeit von Problemen (Treiber, Versionskonflikte, ...)

mkinzler 16. Apr 2008 06:36

Re: einfache Datenbankanwendung ODBC SQL
 
Aber nicht ganz optimal heisst nicht sich ausschliessen.

Bernhard Geyer 16. Apr 2008 06:46

Re: einfache Datenbankanwendung ODBC SQL
 
Zitat:

Zitat von mkinzler
Aber nicht ganz optimal heisst nicht sich ausschliessen.

Hab ich doch geschrieben :zwinker: :

Zitat:

Sie schließen sich nicht aus aber man sollte sie vermeiden.

mkinzler 16. Apr 2008 06:59

Re: einfache Datenbankanwendung ODBC SQL
 
Du nicht.

raena 16. Apr 2008 09:22

Re: einfache Datenbankanwendung ODBC SQL
 
ok Leute, vielen Dank. Mein Programm läuft jetzt erst mal.
Ich will jetzt das Teil umstellen auf
a, Anwendung -> BDE -> ODBC -> ODBC-Treiber -> Datenbank

D.h. weg von ADO. Was ist denn das Pendant von "TADOConnection"

Hier mein Programm, was funktioniert, euch aber nicht gefallen wird :P :P

Delphi-Quellcode:
program Databaseprj;

uses
  Forms,
  DBtest in 'DBtest.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.

unit DBtest;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ADODB, Grids, DBGrids, DB, StdCtrls;

type
  TForm2 = class(TForm)
    ADOConnection1: TADOConnection;
    ADODataSet1: TADODataSet;
    DataSource1: TDataSource;
    DBGrid_SQL_Result: TDBGrid;
    btn_Query: TButton;
    Edt_SQL_Input: TEdit;
    procedure btn_QueryClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
implementation

{$R *.dfm}

procedure TForm2.btn_QueryClick(Sender: TObject);
begin
{showmessage('test');}

ADODataSet1.active:=false;
ADODataSet1.CommandText:=Edt_SQL_Input.Text;
ADODataSet1.active:=true;

end;



procedure TForm2.FormCreate(Sender: TObject);
begin
Edt_SQL_Input.Text:='select * from ';
end;

end.

raena 16. Apr 2008 09:29

Re: einfache Datenbankanwendung ODBC SQL
 
noch ne Frage,

wie kann ich das machen, dass der Conncetion String nicht fix ist, sondern
dass ein Fenster aufpoppt mit den vorhandenen ODBC Einträgen in dem man dann
die entsprechenden Verbindung auswählen kann?
Weiss jemand das?

Danke.

mkinzler 16. Apr 2008 09:36

Re: einfache Datenbankanwendung ODBC SQL
 
Zitat:

D.h. weg von ADO. Was ist denn das Pendant von "TADOConnection"
Warum weg von ADO? Man sollte eher einen großen Bogen um die BDE machen!

raena 16. Apr 2008 09:46

Re: einfache Datenbankanwendung ODBC SQL
 
ok meinetwegen mit ADO, aber was ist denn dann an meinem Programm falsch?
Auf den ersten Click funktioniert es.

WS1976 16. Apr 2008 11:20

Re: einfache Datenbankanwendung ODBC SQL
 
Hallo,

ADODB („ActiveX Data Objects Databases“, meist, auch hier im weiteren Text, ADO genannt) ist der Nachfolger von DAO. Im Gegensatz zu DAO welches in Grundgerüst hauptsächlich für den Einsatz mit Jet-Datenbanken wie Access oder Excel konzipiert ist und zu anderen Datenquellen meist über ODBC gehen muß stützt sich ADO auf die OLEDB-Treiber welche die ODBC-Treiber mehr und mehr ablösen. OLEDB bietet eine höhere Performance und oft auch mehr Möglichkeiten für den Entwickler. Über ADO lassen sich fast alle geläufigen Datenbanken zugreifen, egal ob Access, SQL-Server, Oracle, Informix und viele andere. Auch ODBC-Verbindungen, lassen sich problemlos verwenden, sind aber durch OLEDB eigentlich überflüssig.

Grüsse
Rainer
(Hab mich vielleicht falsch ausgedrückt! Wollte eigentlich nur damit sagen, dass er sich erst mal überlegen soll was er eigentlich will.)

raena 16. Apr 2008 13:53

Re: einfache Datenbankanwendung ODBC SQL
 
Hallo WS1976.

Ok, ich denke dann wird meine Anwendung so wie sie ist auch so funktionieren.
Ich suche jetzt nur noch nach einer Möglichkeit dem benutzer
der selektieren der entsprechenden Datenbank zu erleichtern,
z.B. in dem ich dem User die Liste mit vorhandenen ODBC Eintägen zeige
und die entsprechnede Verbindung vom User ausgewählt werden kann.
Hat da jemand eine Ahnung?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:51 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