Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Blobs aus SQL Anfrage ausschliessen (https://www.delphipraxis.net/50551-blobs-aus-sql-anfrage-ausschliessen.html)

midrag 27. Jul 2005 14:57

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

marabu 27. Jul 2005 15:11

Re: Blobs aus SQL Anfrage ausschliessen
 
Hallo midrag,

setze doch mal die Eigenschaft Visible des entsprechenden Feldes auf FALSE.

Grüße vom marabu

WoGe 27. Jul 2005 15:59

Re: Blobs aus SQL Anfrage ausschliessen
 
Zitat:

Zitat von marabu
setze doch mal die Eigenschaft Visible des entsprechenden Feldes auf FALSE.

Das nutzt leider garnix. Die Inhalte der Blobs werden trotzdem übertragen.
Ich denke man muss das select tatsächlich ohne BlobFeld ausführen. Die Blobs bekommt man dann übereine separate Query.

Gruss
wo

marabu 27. Jul 2005 16:02

Re: Blobs aus SQL Anfrage ausschliessen
 
Hallo WoGe,

Zitat:

Zitat von midrag
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?

Sollte ich das falsch verstanden haben?

marabu

r_kerber 27. Jul 2005 16:09

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.

WoGe 27. Jul 2005 16:11

Re: Blobs aus SQL Anfrage ausschliessen
 
Hallo marabu.

Zitat:

Zitat von marabu
Sollte ich das falsch verstanden haben?

Sorry, nein nicht wirklich.

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

midrag 28. Jul 2005 07:08

Re: Blobs aus SQL Anfrage ausschliessen
 
Zitat:

Zitat von WoGe
Hallo marabu.
Da Blobs gross sind, habe ich vermutet :-D das midrag deswegen das Blob nicht im DBGrid haben will.

Es geht vielmahr darum, dass ich das Blob nicht fürs DBGrid brauche und deshalb auch nicht übertragen möchte(erst später wenn es benötigt wird). Die nicht benötigten Spalten habe ich aus dem DBGrid verbannt, er stellt aber trotzdem eine SELECT * FROM Anfrage.
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?

Sharky 28. Jul 2005 07:22

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:
SELECT pk_feld, feld1, feld2 ,feld3 FROM tabelle
nur die Felder holen die Du auch benötigst.

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

WoGe 28. Jul 2005 07:52

Re: Blobs aus SQL Anfrage ausschliessen
 
Moin,

Zitat:

Zitat von Sharky
Man müsste jetzt mal prüfen ob alleine durch das vorhandensein eines BLOB in einer Tabelle diese schon größer/langsammer wird.

So der Client auf einem anderen Rechner läuft: nein

Zitat:

Zitat von Sharky
Ansonsten kannst Du ja einfach mir:
SQL-Code:
SELECT pk_feld, feld1, feld2 ,feld3 FROM tabelle
nur die Felder holen die Du auch benötigst.

Ich weiss leider nicht genug über MySQL aber in FB, IB und MSQL kann man auch einen VIEW oder eine SP machen die maqn mit
SQL-Code:
Select * form View
aufrufen kann. Der Vorteil dabei, der Benutzer muss nichts über die Originaltabelle wissen.

Das Blobfeld wird dann, wie von Sharky gesagt, separat übertragen.

mfg
wo

midrag 28. Jul 2005 08:04

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 :-( ).

Jasocul 28. Jul 2005 08:09

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.

midrag 28. Jul 2005 08:23

Re: Blobs aus SQL Anfrage ausschliessen
 
Zitat:

Zitat von Jasocul
Dann benötigst du eine zweite SQLTable für das Blob-Feld.

es bleibt ja nicht bei der zweiten SQL Table. Ich brauche dann noch: dsp, cds & ds Komponenten.

Ich freunde mich langsam an das Blob Feld einfach mit einzulesen...

hnr1 28. Jul 2005 20:52

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?

marabu 2. Aug 2005 07:02

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

mschaefer 2. Aug 2005 09:07

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

midrag 8. Aug 2005 09:26

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