![]() |
Datenbank: Firebird • Version: 2 • Zugriff über: IBDAC
IBDAC: Prepare/Unprepare, was macht Firebird
Hallo,
ich habe hier etwas Code.
Delphi-Quellcode:
Schaue ich mir das mit dem DB-Monitor an, sehe ich natürlich das Prepare/Unprepare, was hier ja nutzlos ist.
Q: TIBCQuery;
Q.SQL.Clear; Q.SQL.Add('Select A From Tabelle'); Q.Prepare; Q.ExecSQL; Q.UnPrepare; Q.SQL.Clear; Q.SQL.Add('Select B From Tabelle'); Q.Prepare; Q.ExecSQL; Q.UnPrepare; IBDAC prepared die Query vor dem ExecSQL ja selbst, wenn sich der SQL-Inhalt geändert hat (oder nicht?). Lasse ich alle Prepare/Unprepare weg, sehe ich nur noch die ExecSQL's, wo ist das Prepare von IBDAC? Es geht mir hier nicht um tatsächliche prepared Queries (Parameter-Nutzung usw.), sondern diesen Code hier. Was mich so stört, ist auch das UnPrepare. Macht die DB mit diesem Code mehr als sie müßte? Weiss das jemand? Danke Heiko |
AW: IBDAC: Prepare/Unprepare, was macht Firebird
falls du die ibexpert Vollversion hast (oder auch andere firebird traceapi tools), kannst du sehen, was der Server daraus macht, das ist meistens viel wichtiger als das was deine Komponente da so als Protokoll einträgt.
Bei fast allen Komponenten gilt folgendes: wenn du ein prepare aufrufst, wird die Komponente kein automatisches unprepare machen. Sobald du aber der SQL Text änderst, wird ein unprepare gemacht. Wird prepare nicht explizit aufgerufen, dann wird nach open/close bzw nach ExecSql automatisch ein unprepare gemacht und mit dem nächsten open/close oder execsql ebenfalls wieder ein neuer prepare/unprepare zyklus. Dein Code macht beim einmaligen Aufruf nicht mehr und nicht weniger als jede Komponente auf API Ebene auch machen müsste. In der ExecSQL Implementation kommt irgendwo oben sinngemäß if not prepared then prepare ..... und am ende das zugehörige unprepare, falls das unprepared war. Im Setter für die SQL Property wird auf jeden Fall ein if prepared then unprepare aufgerufen. wenn du aus den zeilen
Code:
das hier gemacht hättest, wäre es auf der Datenbankseite identisch abgelaufen.
Q.Prepare;
Q.ExecSQL; Q.UnPrepare;
Code:
Erst in Schleifen mit unterschiedlichen Parametern ist ein explizites Prepare/Unprepare oft sinnvoll, aber auch nicht immer ...
Q.ExecSQL;
|
AW: IBDAC: Prepare/Unprepare, was macht Firebird
Hallo Holger,
die Vollversion hatte ich mal gekauft, als du in Barleben (bei Magdeburg) warst 200X :) Also sollte ich lieber mal den Server statt den DB-Monitor befragen. Danke Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz