AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken IBDAC: Prepare/Unprepare, was macht Firebird
Thema durchsuchen
Ansicht
Themen-Optionen

IBDAC: Prepare/Unprepare, was macht Firebird

Ein Thema von hoika · begonnen am 24. Sep 2015 · letzter Beitrag vom 25. Sep 2015
Antwort Antwort
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#1

IBDAC: Prepare/Unprepare, was macht Firebird

  Alt 24. Sep 2015, 17:27
Datenbank: Firebird • Version: 2 • Zugriff über: IBDAC
Hallo,
ich habe hier etwas Code.

Delphi-Quellcode:
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;
Schaue ich mir das mit dem DB-Monitor an, sehe ich natürlich das Prepare/Unprepare, was hier ja nutzlos ist.
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
Heiko

Geändert von hoika (24. Sep 2015 um 17:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
646 Beiträge
 
FreePascal / Lazarus
 
#2

AW: IBDAC: Prepare/Unprepare, was macht Firebird

  Alt 24. Sep 2015, 20:09
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:
Q.Prepare;
Q.ExecSQL;
Q.UnPrepare;
das hier gemacht hättest, wäre es auf der Datenbankseite identisch abgelaufen.

Code:
Q.ExecSQL;
Erst in Schleifen mit unterschiedlichen Parametern ist ein explizites Prepare/Unprepare oft sinnvoll, aber auch nicht immer ...
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: IBDAC: Prepare/Unprepare, was macht Firebird

  Alt 25. Sep 2015, 05:41
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
Heiko
  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 20:39 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