![]() |
DBImage-Felder leeren, nicht löschen
Hallo zusammen
Ich hab ein Problem: Mit Bildern Gefüllte TDBImage-Felder sollten geleert werden. Ich möchte nicht den gesamten Datensatz mit Delete mittels Navigator löschen. Also nur ein Art "Clear". Hat jemand eine Idee ? Ich komm einfach nicht drauf. Delphi 2.0 Besten Dank für Eure Beiträge. Gruss Spargeltarzan |
Re: DBImage-Felder leeren, nicht löschen
Am Besten Datenbankfeld auf NULL setzen bzw
Delphi-Quellcode:
Field.Clear;
|
Re: DBImage-Felder leeren, nicht löschen
Danke für den Hint.
Hab's folgendermassen versucht: table1.edit; dbimage1.field.clear; ergibt eine Fehlermeldung: BLOB not opened. Nochmals ausgeführt ergabs die Fehlermeldung: Record locked by another user MFG Spargeltarzan |
Re: DBImage-Felder leeren, nicht löschen
Wende es mal direkt auf das Feld in der Datenbank an.
|
Re: DBImage-Felder leeren, nicht löschen
Wie meintest Du das, auf die Datenbank anwenden ?
Ich habs so versucht:
Delphi-Quellcode:
Dies ergab dann wieder die gleiche Fehlermeldung: locked.
table1.edit;
//dbimage1.field.clear; table1.FieldByName('Holzbild').AsString := ''; Gruss Spargeltarzan [edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit] |
Re: DBImage-Felder leeren, nicht löschen
Delphi-Quellcode:
oder
table1.FieldByName('Holzbild').Clear;
Delphi-Quellcode:
table1.FieldByName('Holzbild').Value := NULL;
|
Re: DBImage-Felder leeren, nicht löschen
Hallo
Besten Dank für Deine Vorschläge, aber alle beide gingen nicht. Es gab jedes mal die Fehlermeldung: Record locked, used by another user. Mein Quelltext:
Delphi-Quellcode:
Hab alle Möglichkeiten durchgespielt, ohne Erfolg.
begin
table1.edit; //dbimage1.field.clear; //table1.FieldByName('Holzbild').CanModify; table1.FieldByName('Holzbild').Value := NULL; //table1.FieldByName('Holzbild').Clear; end; Gruss Spargeltarzan [edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit] |
Re: DBImage-Felder leeren, nicht löschen
Hallo
Bei Eingabe: table1.edit; dbimage1.field.clear; gabs die Fehlermeldng: BLOB not opened. Was muss ich tun um BLOB zu öffnen ? Gruss Spargeltarzan |
Re: DBImage-Felder leeren, nicht löschen
Hab noch folgendes probiert:
Delphi-Quellcode:
ohne Erfolg, hab jetzt einfach keine Fehlermeldung, aber das Feld wurde nicht geleert.
begin
table1.active:=false; table1.active:=true; table1.edit; try Table1.Open; except on EDataBaseError do dbimage1.field.clear;{ The dataset could not be opened } end; Gruss Spargeltarzan [edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit] |
Re: DBImage-Felder leeren, nicht löschen
Kann es sein, dass die DB im Programm offen ist und benützt wird ? Ich bekomm die Fehlermeldung: Record locked, DB used by another user (Bei Anwendung von : table1.FieldByName('Holzbild').Value := NULL - zum leeren des Feldes.
Ich verwende verschiedene TTable's mit derselben DB in anderen Units. Sind diese denn offen ? Kann mir jemand weiterhelfen, dass ich diese Fehlermeldung (Locked) nicht mehr kekomme ? Gruss Spargeltarzan |
Re: DBImage-Felder leeren, nicht löschen
Verweisen die anderen Tables auf die selbe Datenbanktablle?
|
Re: DBImage-Felder leeren, nicht löschen
Hallo,
vergiss das blöde TTable. Nimm eine Query. Query.SQL.Add('Update Table1 Set Blob_Field=NULL Where Id=5'); Query.ExecSQL; Id=5 ist jetzt mal geraten ;) Heiko |
Re: DBImage-Felder leeren, nicht löschen
An mkinzler:
Ja die Tables weisen auf dieselbe Datenbank. |
Re: DBImage-Felder leeren, nicht löschen
Liste der Anhänge anzeigen (Anzahl: 1)
Wie geht das mit Query ?
Id=5 ? was ist das ? Ich kenn mich mit query nicht gut aus. Meine Basisdatenbank besteht aus ca. 950 Datensätzen. Ich hab ein Input-Blatt, wo ich Bilder absave. Ich möchte einfach die Bilder aus der Datenbank entfernen, ohne den gesamten Datensatz (z.B.) Nr.567 zu löschen. Ich navigiere mit dem DBNavigator durch die Datenbank und zeige die BLOB-Felder dann mit DBImage an. Ich möchte einfach bei allen 6 Bildern ein Button setzen, der mir das Bild leert (nicht löscht). Ich hab ein Screenshot des Inputs zur Verständisklärung beigefügt. Gruss Spargeltarzan |
Re: DBImage-Felder leeren, nicht löschen
Sollen die Bilder nur am Bildschirm geleert werden oder auch aus der DB entfernt?
|
Re: DBImage-Felder leeren, nicht löschen
Hallo,
Id ist der Primär-Schlüssel der Tabelle. Irgendwie muss die Query ja wissen, was sie leeren soll. Nehmen wir mal an, Table1 ist mit dem DataSet verbunden.
Delphi-Quellcode:
var
Query: TQuery; begin Query:= TQuery.Create(NIL); try with Query do begin SQL.Clear; SQL.Add('Update Table1 Set Blob_Field=NULL Where Id=:Id'); ParamByName('Id').AsInteger:= Table1.FieldByName('Id').AsInteger; ExecSQL; end; finally Query.Free; end; // ev. das hier noch Table1.Refresh; end; Heiko |
Re: DBImage-Felder leeren, nicht löschen
Vom Bildschirm und aus der DB, aber der Datensatz sollte nicht gelöscht werden (wie mit Delete vom Navigator).
Methode: Table1.ClearFields Also igendwie kann ich diese Standardanweisung zum leeren (löschen) nicht anwenden, weil die Datenbank irgendwo in Gebrauch ist (daher die Meldung: Record locked, db used by another user). Ich habe viele Tables in Gebrauch, muss ich alle Tables auf active:=false setzen ? Das wäre aber nicht gut, denn ich habe viele Units und dann müsste ich bei jedem Aufruf die Eigenschaft active auf true stellen. |
Re: DBImage-Felder leeren, nicht löschen
Nur so eine Idee:
Delphi-Quellcode:
DBImage.Datasource := nil;
|
Re: DBImage-Felder leeren, nicht löschen
Hallo,
1. was ist mit meiner Query ? 2. Schreibe dir eine Methode OpenTable, die jede unit aufruft. Dein Code ist ene schönes Bsp. wie amn es nicht macht ;) OK, habe ich früher auch so gemacht. Die TTable darf nur an genau einer Stelle stehen, z.B. in einer Datenklasse. Jede weitere Unit hat diese Klasse zu benutzen. Heiko |
Re: DBImage-Felder leeren, nicht löschen
An Heiko
Ja ich weiss, ich hätte ein Daten-Modul einbinden sollen, mit einer Table und einer Datasource. Aber das ist jetzt zu spät. Wie meinst du das: eine Methode OpenTable schreiben ? Ich kappier gar nichts mehr. Gruss Spargeltarzan |
Re: DBImage-Felder leeren, nicht löschen
Mit dem Befehl:
DBImage1.Datasource := nil; erhalte ich zwar keine Fehlermeldung, aber es löst nicht mein Problem. Trotzdem Danke Gruss Spargeltarzan |
Re: DBImage-Felder leeren, nicht löschen
Nochmals zu Deiner Query:
Delphi-Quellcode:
Ich hab überhaupt keine Erfahrung mit dieser VCL-Unit. Ich sortiere immer über Sekundärindices (Paradox-DB).
var
Query: TQuery; begin Query:= TQuery.Create(NIL); try with Query do begin SQL.Clear; SQL.Add('Update Table1 Set Blob_Field=NULL Where Id=:Id'); ParamByName('Id').AsInteger:= Table1.FieldByName('Id').AsInteger; ExecSQL; end; finally Query.Free; end; // ev. das hier noch Table1.Refresh; end; Geht viel schneller, aber das ist ja nicht das Problem: Ich möchte einfach z.B. von datensatz Nr. 567 das Imagefeld : Holzbild leeren, ohne den Datensatz zu löschen. Was ist mit Where Id:=Id ? Id scheint der Feldname zu sein. Aber wie komme ich zu Datensatz Nr. 567 ? Gruss Spargeltarzan [edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:39 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