![]() |
Datenbank: MySQL • Version: 4.0 • Zugriff über: dbExpress
Blobs aus SQL Anfrage ausschliessen
Hallo,
ich habe folgendes Problem: Ich spreche eine SQL Datenbank in einer Multiuserumgebung an. Die Tabellen bestehen aus gemischten Formaten (BLOB, INT, etc). Da ich auch in die DB schreibe und über die dbExpress Komponenten zugreife habe ich in Delphi folgenden Aufbau: SQLConnection -> SQL Table -> DataSetProvider -> ClientDataSet -> DataSource -> DBGrid Im Grid soll das Feld der Tabelle mit dem Typ BLOB nicht angezeigt werden (allerdings brauche ich das Blob Feld später im Programm). Wie teile ich Delphi mit, dass es im Select Statement fürs DBGrid das BLOB Feld nicht berücksichtigt? Danke im Voraus!, midrag |
Re: Blobs aus SQL Anfrage ausschliessen
Hallo midrag,
setze doch mal die Eigenschaft Visible des entsprechenden Feldes auf FALSE. Grüße vom marabu |
Re: Blobs aus SQL Anfrage ausschliessen
Zitat:
Ich denke man muss das select tatsächlich ohne BlobFeld ausführen. Die Blobs bekommt man dann übereine separate Query. Gruss wo |
Re: Blobs aus SQL Anfrage ausschliessen
Hallo WoGe,
Zitat:
marabu |
Re: Blobs aus SQL Anfrage ausschliessen
Durch einen Doppelklick auf DBGrid öffnet sich ein Fenster Columns bearbeiten. Dort kannst Du festlegen, welche Spalten im DBGrid angezeigt werden sollen.
|
Re: Blobs aus SQL Anfrage ausschliessen
Hallo marabu.
Zitat:
Ich ärgere mich nur mir genau so einem Problem rum. Ich will das Blobfeld eigentlich garnicht übertragen, brauche es aber. Es stellt genaugenommen den Grund für die gesammte Tabelle dar. Da Blobs gross sind, habe ich vermutet :-D das midrag deswegen das Blob nicht im DBGrid haben will. mfg wo |
Re: Blobs aus SQL Anfrage ausschliessen
Zitat:
Das Blobfeld wird aber nur relativ selten gebraucht, will es deshalb nicht ständig mit übertragen. eine Möglichkeit wäre es die entsprechende Spalte aus der SQL Table zu löschen und einen zweiten Pfad mit einer weiteren SQLTable (+dsp, cds, ds)zu erzeugen und dort nur die Blobfelder einzutragen. Finde das aber ziemlich unelegant. Es stellt sich dann auch die Frage wieso man nicht gleich die Blobfelder in einer weiteren Tabelle speichert? |
Re: Blobs aus SQL Anfrage ausschliessen
Hai midrage,
die BLOB-Felder in einer eigenen Tabelle zu speichern wäre natürlich eine Möglichkeit. Man müsste jetzt mal prüfen ob alleine durch das vorhandensein eines BLOB in einer Tabelle diese schon größer/langsammer wird. Ansonsten kannst Du ja einfach mir:
SQL-Code:
nur die Felder holen die Du auch benötigst.
SELECT pk_feld, feld1, feld2 ,feld3 FROM tabelle
Wenn dann doch der Inhalt des Blob-Feldes benötigt wird machst Du einfach mit einem zweiten Query
SQL-Code:
SELECT blob_feld FROM tabelle WHERE pk_feld = pk_feld.des_aktiven_DS_der_anderen_query
|
Re: Blobs aus SQL Anfrage ausschliessen
Moin,
Zitat:
Zitat:
SQL-Code:
aufrufen kann. Der Vorteil dabei, der Benutzer muss nichts über die Originaltabelle wissen.
Select * form View
Das Blobfeld wird dann, wie von Sharky gesagt, separat übertragen. mfg wo |
Re: Blobs aus SQL Anfrage ausschliessen
ja, auf MySQL Ebene würde das so funktionieren.
Ich arbeite aber der SQLTable Komponente und kann die Select Anweisung nicht manuell anpassen. Um das Blobfeld aus der Anfrage zu entfernen müsste ich es aus Fields (SQLTable) löschen. Das klappt auch, leider kann ich das Blob Feld dann überhaupt nicht benutzen (kann zur runtime das Field auch nicht wieder einfügen :-( ). |
Re: Blobs aus SQL Anfrage ausschliessen
Auch wenn du SQLTable verwendest sollte es funktionieren.
Dann benötigst du eine zweite SQLTable für das Blob-Feld. Andere Möglichkeite wäre, das Blob-Feld nicht zu löschen, sondern die Eigenschaft Visible auf Fals zu setzen. Dann solltest du wieder darauf zugreifen können. Allerdings wird dann das Feld auch jedesmal mit übertragen. Tja, das Eine, das man will, das Andere, was man muss. |
Re: Blobs aus SQL Anfrage ausschliessen
Zitat:
Ich freunde mich langsam an das Blob Feld einfach mit einzulesen... |
Re: Blobs aus SQL Anfrage ausschliessen
ein weiteres Problem ist, dass die SQLTable Komponente sofort nach Active = true eine SELECT * FROM Anfrage stellt, was ich persönlich für wunderlich halte, da so unnötig Traffic entsteht. Oder habe ich vergessen an der richtigen Stelle den Haken zu setzten?
|
Re: Blobs aus SQL Anfrage ausschliessen
Na ja, so richtig wunderlich ist das ja nun nicht - es ist ja schließlich eine Table-Komponente. Wenn du die zu übertragenden Datenmengen minimieren willst, dann wirst du eine Query verwenden müssen.
Grüße vom marabu |
Re: Blobs aus SQL Anfrage ausschliessen
Moin, moin,
wie Marabu schon schreeibt isr da eine Query notwendig. Würde das von der Systematik folgend angehen. 1. Beim Programmstart läßt Du eine SQL-Abfrage laufen, die nur einen Datensatz zurückgibt, dann gehts Du mit Fieldtype die Felder durch und setzt die Feldnamen wo der Typ nicht TSBlob ist in eine Stringliste. 2. Baue mit den Feldern aus der StringListe eine SQL-Anfrage zusammen die dann ihr Ergebnis an das DBGrid gibt. Mit der Verfahrensweise kannst Du später "Nichtblobfelder" hinzufügen und das Grid passt sich weitrhin automatisch der Datenmenge an. Du mußt lediglich die Felder mit Blobeigenschaft explizit an ein Ausgabeelement anschliesen. Grüße in de Runde // Martin |
Re: Blobs aus SQL Anfrage ausschliessen
danke! das werde ich ausprobieren.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:22 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