Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   UniDAC, editierbare Query mit Join geht das? (https://www.delphipraxis.net/167298-unidac-editierbare-query-mit-join-geht-das.html)

Kostas 22. Mär 2012 16:48

Datenbank: Firebird • Version: 1.5 • Zugriff über: UniDAC

UniDAC, editierbare Query mit Join geht das?
 
Hallo Zusammen,

ich steige soeben um von Delphi5 mit IBO auf Delphi XE2 mit UniDac. (UniDac in der Testphase)
Unter IBO ist es möglich ein Select welcher Joins enthält dennoch edieribar zu halten.
z.B.:
Code:
SELECT A.ADRESSID, A.FIRMA, A.STRASSE, A.ORT, R.RECHNUNGID, R.RECHNUNGNR, R.DATUM
FROM RECHNUNGEN R
JOIN ADRESSEN A ON (A.ADRESSID = R.ADRESSID)
WHERE R.RECHNUNGID = :RECHNUNGID
FOR UPDATES << IBO spezifische Kommandos
Bei IBO setze ich dieses SQL in ein TIB_Query und schon sind die Felder von RECHNUNGEN editierbar.
Die Felder von ADRESSEN sind ReadOnly. TIB_Query baut hierfür automatisch die richtigen SQL Statements
für Insert, Update und Delete.

Kann UniDAC das auch? Wenn nicht wie ist das mit UniDAC zu bewerkstelligen? Muss ich alle SQL Statements
für Update, Insert und Delete selbst schreiben?

Gruß Kostas

mkinzler 22. Mär 2012 16:50

AW: UniDAC, editierbare Query mit Join geht das?
 
Hinterlege die entsprechenden Abfragen in den Eigenschaften .InsertSQL, .UpdateSQL, .DeleteSQL

Kostas 22. Mär 2012 16:53

AW: UniDAC, editierbare Query mit Join geht das?
 
Zitat:

Zitat von mkinzler (Beitrag 1158003)
Hinterlege die entsprechenden Abfragen in den Eigenschaften .InsertSQL, .UpdateSQL, .DeleteSQL

Hallo Markus,

meine Anfrage ist ja noch Warm und schon eine Antwort!
Muss ich das SQL selbst schreiben, oder wird es automatisch generiert?

Gruß Kostas

mkinzler 22. Mär 2012 16:54

AW: UniDAC, editierbare Query mit Join geht das?
 
Bei IBDAC kann man sich die Abfrage generieren lassen, sollte dan bei UniDAC genauso sein

Kostas 22. Mär 2012 16:57

AW: UniDAC, editierbare Query mit Join geht das?
 
Besten Dank Markus.

Sir Rufo 22. Mär 2012 17:19

AW: UniDAC, editierbare Query mit Join geht das?
 
Ein Doppelklick auf die UniQuery Komponente und dann zum Reiter "Generale SQL", der baut alles für Dich

tsteinmaurer 22. Mär 2012 19:21

AW: UniDAC, editierbare Query mit Join geht das?
 
@Kostas: Off-Topic: Der Kostas, der vor VIELEN Jahren beim ersten Firebird-Barbecue in Freiburg mit dabei war? Wenn ja: Schön von dir zu hören!

Kostas 23. Mär 2012 08:21

AW: UniDAC, editierbare Query mit Join geht das?
 
Zitat:

Zitat von tsteinmaurer (Beitrag 1158035)
@Kostas: Off-Topic: Der Kostas, der vor VIELEN Jahren beim ersten Firebird-Barbecue in Freiburg mit dabei war? Wenn ja: Schön von dir zu hören!

Hi Thomas,
genau der immer noch der gleiche. Ich freue mich auch von dir zu hören. Ich schreibe dir später eine PN.


Gruß Kostas

Kostas 23. Mär 2012 08:38

AW: UniDAC, editierbare Query mit Join geht das?
 
Bitte noch eines zu UniDAC,

ist es auch möglich zur Laufzeit das WHERE zu erweitern?

Bei IBO schreibe ich in der TIB_Query z.B.:

Code:
SELECT ADRESSID, FIRMA, STRASSE, PLZ, ORT
  FROM ADRESSEN
 WHERE PLZ = :PLZ
TIB_DataSource hat ein Event OnPrepareSQL. Da schreibe ich z.B.:
Code:
  with qrAdressen.SQLWhereItems do
  begin
    if (edFirmaSuchen.txt <> '')  
    then add('FIRMA CONTAINING '' + edFirmaSuchen.txt + ''');
  end;{with}
Ich kann also zur Laufzeit das Where beliebig erweitern.
Für den Aufruf führe ich das aus:
Code:
qrAdressen.InvalidateSQL;
qrAdressen.refresh;
Dabei wird das Where in dem SQL mit dem erweiterten Bedingungen gemischt.
Es entsteht also:
Code:
WHERE PLZ = :PLZ
  AND FIRMA CONTAINING 'blablabla'

Gruß Kostas

mkinzler 23. Mär 2012 08:50

AW: UniDAC, editierbare Query mit Join geht das?
 
Grundsätzlich geht das Anhängen natürlich
Delphi-Quellcode:
with qrAdressen.SQL do
  begin
    if (edFirmaSuchen.txt <> '')
    then add('FIRMA CONTAINING '' + edFirmaSuchen.txt + ''');
  end;{with}
Allerdings fehlt das Ereignis in der DataSource.

Ich würde es aber eher so Lösen:

SQL-Code:
SELECT ADRESSID, FIRMA, STRASSE, PLZ, ORT
  FROM ADRESSEN
 WHERE
    PLZ = :PLZ and
    ( :firma = '' or :firma is null or FIRMA CONTAINING = :firma);


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:45 Uhr.
Seite 1 von 2  1 2      

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