AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi In Access gespeicherte SQL-Abfragen mit Parametern aufrufen?
Thema durchsuchen
Ansicht
Themen-Optionen

In Access gespeicherte SQL-Abfragen mit Parametern aufrufen?

Offene Frage von "torud"
Ein Thema von torud · begonnen am 1. Jan 2009 · letzter Beitrag vom 3. Jan 2009
Antwort Antwort
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

In Access gespeicherte SQL-Abfragen mit Parametern aufrufen?

  Alt 1. Jan 2009, 18:43
Datenbank: Access & MySql • Zugriff über: Jet & ODBC
Hallo Wissende,

ein Kollege und ich sollen für ein Projekt ein Programm schreiben. Leider werden uns dabei die Daten und deren Struktur fest vorgegeben. In dem Projekt werden die Daten in einer mySql-Datenbank gehalten und über eine Access-Datenbank aufgerufen. Die Kollegen haben das wohl aus dem Grund so gemacht, weil sie in Access gleich ein Makro haben laufen lassen, welches die Daten wie in einem Programm ausgewertet darstellt.

Wir sollen nun darauf aufsetzen. Da wir schon ein ähnliches Projekt hatten, stellt sich uns nun die Frage, ob es nicht clever wäre alle SQL-Abfragen, die wir brauchen "fertig" in der Access-Datenbank anzulegen und diese Abfragen dann nur noch über eine ADOConnection mit AdoQuery oder AdoDataset "anzusprechen" und der Abfrage die benötigten Parameter zu übergeben. Vorteil wäre aus unserer Sicht, dass der Benutzer auch mal eine SQL-Abfrage nachträglich ändern kann (ohne dabei die Parameter zu ändern), ohne das das Delphi-Programm neu kompiliert werden muss.

1. Macht das Sinn?
2. Geht das überhaupt?
3. Wie geht das denn?

Also ich habe mir in Access mal die Abfragen angeschaut und teilweise bei einem Doppeltklick Abfrage zu diversen Parametern erhalten. Also sollte das so ja gehen. Wie müsste ich das aber im Programm selbst machen? Eine Query kann ja hier nicht zum Einsatz kommen, da die ja einen SQL-Befehl erwartet.

Ich würde mich wirklich über Antworten freuen. Bis dahin werde ich erstmal im Forum weitersuchen...
Danke
Tom
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: In Access gespeicherte SQL-Abfragen mit Parametern aufru

  Alt 1. Jan 2009, 19:52
da Access nicht unbedingt wegen seiner Stabilität und Geschwindigkeit bekannt ist, würde ich die Abfragen eher als Views oder SPs direkt in MySQL ablegen.
Markus Kinzler
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#3

Re: In Access gespeicherte SQL-Abfragen mit Parametern aufru

  Alt 3. Jan 2009, 21:01
Vielen Dank für Deine Antwort. Leider müssen wir mit der Access-DB arbeiten, da in dieser auch noch Tabellen drin sind, die Grundlage für weiteres Vorgehen sind.

Ich habe nun auch schon gefunden, dass man mit AdoQuery und AdoDataset in einer mdb-Datein gespeicherte Abfrage ansprechen kann und denen Parameter übergeben kann. Leider erhalte ich immer die Fehlermeldung, dass der Parameter in meiner Abfrage nicht gefunden werden kann. Folgende Daten nutze ich:

gespeicherte Abfrage in Access (qer_tv_schedule) -> Parameter am Ende xMeetingId
SQL-Code:
SELECT runde.Startzeit, disziplin.Name AS DISZIPLIN, kategorie.Name AS KAT, rundentyp.Name AS RUNDE, runde.Status, runde.xRunde, runde.xWettkampf, runde.Gruppe, wettkampf.xDisziplin, wettkampf.xKategorie
FROM (((runde INNER JOIN rundentyp ON runde.xRundentyp=rundentyp.xRundentyp) INNER JOIN wettkampf ON runde.xWettkampf=wettkampf.xWettkampf) INNER JOIN disziplin ON wettkampf.xDisziplin=disziplin.xDisziplin) INNER JOIN kategorie ON wettkampf.xKategorie=kategorie.xKategorie
WHERE wettkampf.xMeeting = :xMeetingId;
Delphi-Quellcode:
  with dm.ADODataSet1 do
    begin
      Close;
      CommandType := cmdTable;
      CommandText := 'qer_tv_schedule';
      Parameters.ParamValues['xMeetingId'] := lbl_meeting_id.Caption;
      Open;
    end;
Fehlermeldung:
Im Projekt Projekt.exe ist eine Exception der Klasse EDatabaseError aufgetreten. Meldung: 'ADODataSet1: Parameter 'xMeetingId' nicht gefunden'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.

Seht mir Fehler bitte nach, da ich das zum ersten mal mache. Aber eigentlich könnt Ihr ja sehen, dass der Parameter namenstechnisch im Access-File vorhanden ist und auch so im Delphi angegeben wird. Ideen?
Danke
Tom
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: In Access gespeicherte SQL-Abfragen mit Parametern aufru

  Alt 3. Jan 2009, 23:21
Ändere deine gespeicherte Abfrage (lösche die Where-Klausel)...
SQL-Code:
SELECT runde.Startzeit, disziplin.Name AS DISZIPLIN, kategorie.Name AS KAT, rundentyp.Name AS RUNDE, runde.Status, runde.xRunde, runde.xWettkampf, runde.Gruppe, wettkampf.xDisziplin, wettkampf.xKategorie
FROM (((runde INNER JOIN rundentyp ON runde.xRundentyp=rundentyp.xRundentyp) INNER JOIN wettkampf ON runde.xWettkampf=wettkampf.xWettkampf) INNER JOIN disziplin ON wettkampf.xDisziplin=disziplin.xDisziplin) INNER JOIN kategorie ON wettkampf.xKategorie=kategorie.xKategorie;
Dann kannst du die Abfrage benutzen und einschränken...
Delphi-Quellcode:
ADODataSet.Close;
ADODataSet.CommandType := cmdText;
ADODataSet.CommandText :=
  'SELECT *'#13 +
  'FROM qer_tv_schedule'#13 +
  'WHERE xMeeting = :xMeetingId';
ADODataSet.Parameters.ParamByName('xMeetingId').Value := lbl_meeting_id.Caption;
ADODataSet.Open;
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#5

Re: In Access gespeicherte SQL-Abfragen mit Parametern aufru

  Alt 3. Jan 2009, 23:34
Hallo,

danke für Deine Antwort. 3 Probleme/Fragen habe ich dazu.

1. Ich erhalte nun folgende Fehlermeldung:

Im Projekt Projekt.exe ist eine Exception der Klasse EOleException aufgetreten. Meldung: 'Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.

Beim Debuggen konnte ich aber zweifelsfrei feststellen, dass der Parameter den gewünschten Wert von 40 oder 41 hatte. Was ist also die Ursache für das Problem?

2. Ich hatte eigentlich die Hoffnung dass man die gespeichert Abfrage im Access schon fix und fertig mit den Parameterbezeichnungen versehen kann. Damit sind dann komplexere InnerKoin-Abfragen relative "einfach" zu händeln. Man erstellt die Abfrage im Access und übergibt nur noch die Parameterbezeichner samt deren Inhalten. Mit Deinem Beispiel scheint mir das nicht so einfach zu sein.

Die wenigen Beispiele, die ich hier im Forum finden konnte, waren auch so aufgebaut.

3. Wo kann man sich eigentlich ganz speziell zu diesem Thema in Verbindung mit Access und Delphi belesen?
Danke
Tom
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: In Access gespeicherte SQL-Abfragen mit Parametern aufru

  Alt 3. Jan 2009, 23:48
Sorry, du musst dafür sorgen, dass die Spalte xMeeting auch von der Abfrage in Access zurückgeliefert wird. Deine Denkweise bezüglich der Parameter innerhalb von Access ist so nicht richtig. Die Parameter existieren nur in der Delphiumgebung also deiner Anwendung. Es ist richtig, dass du dir Abfrage also komplexere SQL-Statements in Access zusammenklicken kannst. Diese Abfragen liefern dann Ergebnisse die du über den gezeigten Weg (also über Delphi heraus) einschränken kannst.
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:28 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