AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Query aus anderer Unit verändern
Thema durchsuchen
Ansicht
Themen-Optionen

Query aus anderer Unit verändern

Ein Thema von Luca Haas · begonnen am 10. Okt 2017 · letzter Beitrag vom 11. Okt 2017
Antwort Antwort
Luca Haas

Registriert seit: 23. Aug 2017
Ort: Bad Breisig
139 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

Query aus anderer Unit verändern

  Alt 10. Okt 2017, 09:37
Datenbank: MSSQL • Version: ? • Zugriff über: ADO Query
Hi Leute,
wie im Titel bereits gesagt versuche ich die Query meiner Unit1, mithilfe eines Buttons der Unit2, zu verändern. Unit1Query soll dabei auch den selben SQL Text erhalten wie es Unit2Query aktuell hat. Gleichzeitig soll sich Unit2 über den Button auch noch schließen(was natürlich kein Problem ist).
Jetzt wollte ich fragen ob das überhaupt so geht oder ob es dafür andere Ansätze gibt.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Query aus anderer Unit verändern

  Alt 10. Okt 2017, 09:43
Für die Kommunikation mit Datenbanken, gibt es die Datenmodule. In denen sollte alles versammelt sein, was für den Kontakt notwendig ist, incl. der Querytexte. Darum die Frage was hast Du vor?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Luca Haas

Registriert seit: 23. Aug 2017
Ort: Bad Breisig
139 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: Query aus anderer Unit verändern

  Alt 10. Okt 2017, 09:52
Also meine Unit2 ist eine Suchmaske, auf der man einen SQL-Befehl erstellt. Diesen möchte ich mit Hilfe eines Buttons in eine Query in Unit1 packen, damit ich die gesuchten Daten in einem DBGrid in der Unit1 anzeigen kann.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: Query aus anderer Unit verändern

  Alt 10. Okt 2017, 12:04
Lege dazu alle Querys ... in ein Datenmodul. Auf dieses kannst Du dann von beiden Units aus zugreifen.

Gehen wir davon aus, dass Du über Unit1, Unit2 und Unit3 verfügst.

Unit1 und Unit2 hast Du bereits. Unit3 wird das DataModule1 enthalten.
Sowohl in Unit1, als auch in Unit2 musst Du Unit3 in die Uses-Klausel einfügen.

Nun könntest Du aus Unit2 die Query sinngemäß im DataModule1 in dieser Form ansprechen:

Datamodule1.Query.SQL.Text := 'Ergebnis Deiner Zusammenstellung des SQLs.';

In Unit1 könntest Du diese Query dann in der Art ansprechen:

Datamodule1.Query.Open;

Der DataSource im in Unit1, die mit dem DBGrid verbunden ist, müsstest Du bereits im Objektinspektor die Query aus dem DataModule1 zuweisen können. Im Quelltext könnte das so gehen:

DataSource1.DataSet := DataModule1.Query;

Allerdings könntest Du beim Schließen der Suchmaske in etwa auch so vorgehen.

(Nur hingedaddelt und ungetestet)
Delphi-Quellcode:
procedure Form2.Button1Click(Sender : TObject);
begin
  Datamodule1.Query.Close;
  Datamodule1.Query.SQL.Text := 'Ergebnis Deiner Zusammenstellung des SQLs.';
  Datamodule1.Query.Open;
  Close;
end;
Damit musst Du dann nicht in beiden Formularen 'ne Query vorhalten und Dich in beiden Formularen um die Handhabung der Abfragen kümmern.
  Mit Zitat antworten Zitat
Luca Haas

Registriert seit: 23. Aug 2017
Ort: Bad Breisig
139 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: Query aus anderer Unit verändern

  Alt 10. Okt 2017, 12:21
Okay ich habs in der Zeit etwas anders gelöst, aber ich werde das hier auch später mal ausprobieren.

Ich habe es jetzt so gelöst, dass ich mir eine Variable erstellt habe, der ich den Wert des SQL-Befehls gegeben habe, welchen ich Unit1 einfach mit
Delphi-Quellcode:
unit Unit2;

interface

uses
unit1
übergeben habe. Wenn man darauf aufpasst, dass man nich beide Units gegenseitig zum interface, sondern zur implementation schreibt klappt das auch super.
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Query aus anderer Unit verändern

  Alt 11. Okt 2017, 11:35
Hi zusammen

Ich weiss, es gibt jede Menge Beispiele, auch solche von Embarcadero, die so vorgehen, dass ein User in einem Memo ein SQL-Statement eingeben kann und dieses dann ausführen lassen kann.
Ich halte dies für ein sehr sicherheitskritisches Problem - der User kann so ein x-beliebiges Statement eingeben. Ausser den korrekten Datenabfragen können so auch Metadatenabfragen eingegeben werden, um die DB auszuspionieren oder diese Metadaten zu verändern. Im schlimmsten Fall kann eine Datenbank auf diese Weise über den Jordan geschickt werden.

Am Beispiel einer Adress-Anwendung (ich sag hier bewusst nicht Adressverwaltung) würde ich in etwa so vorgehen:
Für die Suche nach einer bestimmten Person: Eingabe des Namens in einem Edit oder einem Memo. Ein Button startet die Anfrage.
Im Programmcode ist/sind das/die Statements definiert, mit denen die meist auf mehrere Tabellen verteilten Informationen aus der DB abgerufen werden. Diese Statements können, und das ist das Wichtige, vom User nicht direkt geändert werden.
Aber der User kann über Checkboxen wählen, dass er alle Infos über diese Person sehen will (wenn er zB.keine der angebotenen Checkboxen auswählt) oder nur die Handynummer wissen will (nur Checkbox 'chbxHandy ist ausgewählt).
Metainformationen (welche und wieviele Tabellen mit welchen Feldern, wer hat Bearbeitungsrechte) können so auch abgefragt werden - aber bitte nur von Usern, die dazu berechtigt sind (Anmelde-Dialog).

Im harmlosesten Fall können Statements, die direkt eingegeben werden können, zur Beschädigung der DB führen.

Ist dein Projekt Teil deiner Einarbeitung in die DB-Programmierung, hat dein Vorgehen bislang auch Vorteile: Du kannst dir vor Augen führen, was passiert, wenn du kein korrektes Statement eingibst und es verarbeiten lassen willst. Und du kannst dir vor Augen führen, was passiert, wenn du Metadaten veränderst.

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  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 23:52 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