AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Delphi 2005 -> MS Access

Delphi 2005 -> MS Access

Ein Thema von tyron78 · begonnen am 11. Aug 2005 · letzter Beitrag vom 23. Sep 2005
Antwort Antwort
Seite 1 von 2  1 2   
tyron78

Registriert seit: 11. Aug 2005
Ort: Düsseldorf
23 Beiträge
 
#1

Delphi 2005 -> MS Access

  Alt 11. Aug 2005, 21:57
Datenbank: MS ACCESS • Version: 2003 • Zugriff über: noch gar nicht... :-(
Hallo.
Ich bin langsam echt am verzweifeln: Ich versuche schon seit ewigkeiten, únter Delphi 2005 einen Zugriff auf eine MS Access (Office XP) DB zu realisieren - ES KLAPPT NICHT! Entweder bekomme ich irgendwelche bescheuerten Fehlermeldung ("Parameter Falsch" oder ähnliches) oder er kann garnicht erst eine Verbindung herstellen... Hab zu Testzwecken extra eine Datenbank mit nur einer Tabelle erstellt, ohne passwort... Kann mir BITTE irgendwer eine Step-by-Step Anleitung mailen oder zumindest einen Link schicken, wie ich zunächst mal die Verbindung zu einer ACCESS DB erstellen kann und anschließend Daten Auslesen und zurückschreiben kann?

Danke im Vorraus

tyron
  Mit Zitat antworten Zitat
vlad

Registriert seit: 23. Okt 2003
1 Beiträge
 
#2

Re: Delphi 2005 -> MS Access

  Alt 11. Aug 2005, 23:44
//Mal ne Unit um auf ne Access Db zugreifen zu können, nichtganz fein funktioniert aber
//hoffe es hilft
Delphi-Quellcode:
unit uCDb;

interface
uses
  System.Collections,
  System.Data,
  System.Data.OleDB,
  System.Web.Mail,
  System.IO;
type
  CDb = class

  private
     conn :OleDBConnection;
     connstr:String;
  public
    function Datenabfrage(abfrage:string;Tabelle:string):DataSet;
    function Wertrueckgabe(ds:DataSet;Tabelle:string;Spalte:string;i:integer):string;
    function UpdateDelete(Anfrage:String):string;
    function GetConnStr():string;
    procedure SetConnStr(conn:String);
    function Einzelwertrueckgabe(Anfrage,Tabelle,Spalte:String;i:integer):string;
    function Login(login,passwd,Tabelle,Spalte:string;ds:DataSet;Nr:integer):string;
    procedure EMAIL(From,Zu,Subject,Nachricht:String);overload;
    procedure EMAIL(From,Zu,Subject,Nachricht,Anhang:String);overload;
    procedure EMAIL(From,Zu,bcc,Subject,Nachricht,Anhang:String);overload;
    constructor Create();overload;
    constructor Create(Conn:String);overload;
  end;

implementation

constructor CDb.Create;
begin
  inherited Create;
  connstr:='Provider=Microsoft.Jet.OLEDB.4.0;'+
             'Data Source= db\db1.mdb'
end;

constructor CDb.Create(Conn:String);
begin
  Self.Create;
  connstr:=conn;
end;

procedure CDB.SetConnStr(conn:String);
begin
  connstr:=conn;
end;

function CDb.GetConnStr():String;
begin
  result:=connstr;
end;

function CDb.Wertrueckgabe(ds:DataSet;Tabelle:string;Spalte:string;i:integer):string;
var dt:DataTable;
    en:IEnumerator;
    rw:DataRow;
begin
  dt:=ds.Tables[Tabelle];
  en:=dt.Rows.GetEnumerator;
  rw:=dt.Rows[i];
  result:=rw[Spalte].ToString;
end;

function CDb.UpdateDelete(Anfrage:String):string;
var cmd:OleDBCommand;
    rueckgabe:string;
begin
  conn :=OleDBConnection.Create(connstr);
  cmd:=OleDBCommand.Create();
  cmd.Connection:=conn;
  cmd.CommandText:=anfrage;
  try
    conn.Open;
    rueckgabe:=cmd.ExecuteNonQuery.ToString;
  except on ex:Exception do
    begin
      rueckgabe:=ex.Message+' '+Anfrage;
    end;
  end;
  conn.Close;
  result:=rueckgabe;
end;

function CDb.Datenabfrage(abfrage:string;Tabelle:string):DataSet;
var cmdSel:OleDbCommand;
    da:OleDBDataAdapter;
    ds:DataSet;
begin
  conn :=OleDBConnection.Create(connstr);
  cmdSel:=OleDbCommand.Create(abfrage,conn);
  da :=OleDbDataAdapter.Create(cmdSel);
  ds :=DataSet.Create();
  try
    conn.Open;
    da.Fill(ds,Tabelle);
    conn.Close;
  except
    on ex:Exception do
  end;
  result:=ds;
  end;

procedure CDB.EMAIL(From,Zu,Subject,Nachricht:String);
var m:mailmessage;
begin
  m:=MailMessage.Create;
  m.From:=From;
  m.&To:=Zu;
  m.Subject:=Subject;
  m.Body:=Nachricht;
  SmtpMail.Send(m);
end;

procedure CDB.EMAIL(From,Zu,Subject,Nachricht,Anhang:String);
var m:mailmessage;
begin
  m:=MailMessage.Create;
  m.From:=From;
  m.&To:=Zu;
  m.Subject:=Subject;
  m.Body:=Nachricht;
  m.Attachments.Add(MailAttachment.Create(Anhang));
  SmtpMail.Send(m);
end;

procedure CDB.EMAIL(From,Zu,bcc,Subject,Nachricht,Anhang:String);
var m:mailmessage;
begin
  m:=MailMessage.Create;
  m.From:=From;
  m.&To:=Zu;
  m.&Bcc:=bcc;
  m.Subject:=Subject;
  m.Body:=Nachricht;
  m.Attachments.Add(MailAttachment.Create(Anhang));
  SmtpMail.Send(m);
end;

function CDB.Einzelwertrueckgabe(Anfrage,Tabelle,Spalte:String;i:integer):string;
var ds:DataSet;
begin
  ds:=Datenabfrage(Anfrage,Tabelle);
  result:=Wertrueckgabe(ds,Tabelle,Spalte,i);
end;

function CDB.Login(login,passwd,Tabelle,Spalte:string;ds:DataSet;Nr:integer):string;
begin
if (login<>'') and (passwd<>'') then
  begin
    try
    if (passwd=Wertrueckgabe(ds,Tabelle,Spalte,Nr)) then
      begin
         result:='True';
      end
    except on ex:Exception do
      begin
        result:=ex.ToString;
      end;
    end;
  end;
end;

end.
[edit=Luckie]Boah, 2003 angemeldet und dannkeine Delphi-Tags. So was sehe ich doch spätestens dann, wenn ich das Posting abgeschickt habe. Mfg, Luckie[/edit]
  Mit Zitat antworten Zitat
UweR

Registriert seit: 15. Mär 2004
Ort: Bad Marienberg
219 Beiträge
 
Delphi 7 Professional
 
#3

Re: Delphi 2005 -> MS Access

  Alt 12. Aug 2005, 08:16
Hallo tyron,

damit wir dir überhaupt helfen können brauchts ein paar mehr Infos. Welche Delphi-2005 (z.B. PE) hast du und was hast du bis jetzt probiert.

Gehe ich eigentlich recht in der Annahme das du ein Win32-Prog schreiben willst?
Gruß
UweR
  Mit Zitat antworten Zitat
tyron78

Registriert seit: 11. Aug 2005
Ort: Düsseldorf
23 Beiträge
 
#4

Re: Delphi 2005 -> MS Access

  Alt 12. Aug 2005, 23:20
Aaalso, da hab ich dann doch wohl n Bisschen was vergessen:
- Ja, ich will ein Win32 Prog schreiben
- Hab Delphi 2005 Enterprise Edition (noch Trial) und Delphi 2005 "Standard"
- Hab alle möglichen manuals probiert, hat aber alles nicht geklappt
- Ich komm irgendwie - trotz des Delphi2005 Handbuchs - mit den Delphi items nicht klar: muß ich n item aus "BDE" nehmen (Database)? Odder nen "open Dialog"? Oder n "Data Access" Item??? Gibts denn nirgends ne Step-by-Step Anleitung?
- Die Anwendung soll Daten aus einer mdb lesen und auch in diese reinschreiben können. Es müssen keine neuen Tabellen erstellt werden. Es muß theoretisch auch nur eine mdb gelesen werden - also kann man sich theoretisch auch den open-Dialog sparen, oder (auch wenn dieser evtl. später mal nützlich werden könnte)?

Mir wäre wichtig zu wissen:
- wie greife ich auf die mdb zu
- wenn ich diese dann (endlich) geöffnet habe, wie greife ich auf tabellen bzw. Ihalte zu
- wie schreibe ich in die DB
- wie speicher ich dann Änderungen ab

Danke im vorraus.

Tyron

P.S.: Das Unit oben habe ich noch nicht ausprobiert
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
769 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Delphi 2005 -> MS Access

  Alt 13. Aug 2005, 06:56
Schau mal die mal diese Tutorials an (die ersten 3 müßten dir weiterhelfen). Ansonsten: Um auf Access vernünftig zugreifen zu können, solltest du die ADO-Komponenten einsetzen, die ab der Professional bei Delphi vorhanden sein sollten (seit Delphi 6).

Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
tyron78

Registriert seit: 11. Aug 2005
Ort: Düsseldorf
23 Beiträge
 
#6

Re: Delphi 2005 -> MS Access

  Alt 16. Aug 2005, 08:39
Mahlzeit und danke für den Link mit den Tutorials - hab jetzt immerhin schonmal nen Connect zu der DB hinbekommen... mal schauen wies weitergeht!
  Mit Zitat antworten Zitat
tyron78

Registriert seit: 11. Aug 2005
Ort: Düsseldorf
23 Beiträge
 
#7

Re: Delphi 2005 -> MS Access

  Alt 25. Aug 2005, 22:27
Mahlzeit. Jetzt muß ich doch nochmal was fragen.
Ich hab jetzt nach dem Tutorial die Datenbank soweit eingebunden, den Connectionstring in der DB gespeichert etc. Dann hab ich noch im on-show event der form der ADOConnection den Connectstring aus der Registry gegeben. Hab auch ein ADOTable Object angelegt, dem ich eine Tabelle der Datenbank zugewiesen habe. Anschließend habe ich im before-open event der Tabelle die Connection ADOConnection1 (meine connection oben) zugewiesen, damit nicht jedes mal nach user und passwort etc. gefragt wird. Klappt soweit auch alles ganz gut, AUUUSSER (jaja, das liebe "außer"...):

- Sobald ich die Felder der tabelle per Drag-und-Drop auf die Form ziehe und dann die Anwendung starte, werde ich immer nach user und passwort der DB gefragt
- Außerdem scheint die Anwendung irgendwo noch die DB geöffnet zu behalten, obwohl ich im on-close(?) event die DB schließe - das äußert sich z.B. darin, daß ich die DB nicht umbenennen kann, solange das Projekt (nicht die Anwendung!) im Delphi geöffnet ist
- wie schaffe ich es, daß ich Daten aus der DB lesen UND auf der Form darstellen kann, ohne daß ich jedes Mal die connection bestätigen muß???

Mit bitte um baldige Antwort und mit freundlichen Grüßen

tyron78
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
769 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Delphi 2005 -> MS Access

  Alt 26. Aug 2005, 06:32
Zu 1: Weil deine Tabelle keine Verbindung zur AdoConnection hat, fragt sie nach dem Kopieren nach der Connection
Zu 2: Verwende besser das Event OnCloseQuery des Hauptfensters, das wird IMMER abgearbeitet!
Zu 3: Im ObjectInspector gibt es für die ADOConnection eine Eigenschaft LoginPrompt. Die steht standardmäßig auf True, setze diese mal auf False und der Spuk endet. Zusätzlich solltest du beim Erzeugen des Connsctionstring darauf achten, daß das Häkchen "Speichern des Kennworts zulassen" gesetzt ist.

Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
tyron78

Registriert seit: 11. Aug 2005
Ort: Düsseldorf
23 Beiträge
 
#9

Re: Delphi 2005 -> MS Access

  Alt 26. Aug 2005, 07:24
Hallo, Mikhal.

Danke für die Antwort. Hab trotzdem noch ne Frage: Hab doch der Tabelle die ADOConnection1 zugewiesen (siehe oben - before open event)... reicht das nicht? Ansonsten werd ich mal Deine Tips zu Hause ausprobieren - hogffentlich klappt das dann...
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
769 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

Re: Delphi 2005 -> MS Access

  Alt 26. Aug 2005, 13:41
Du arbeitest mit einer ADOTable, die muss wissen, auf welcher Datenbank sie die Tabelle abgreifen soll. Damit das funktionieren kann, will die Komponente sofort auf die entsprechende Datenbank zugreifen.

Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf