Entwickler-Ecke

Datenbanken - Bilder in dBase Datenbank aufnehmen ... ?!


LuckyStrike4life - Mi 02.07.03 10:15
Titel: Bilder in dBase Datenbank aufnehmen ... ?!
Morgen,

für mein Projekt ist es wichtig das Unterschriften gestzt werden können, von allen Chefs. Da man denen wohl kaum zumuten kann später alles in gedruckter Form per Hand zu unterschreiben, brauch ich eine andere Lösung.

Alle Unterschriften scannen und jede Unterschrift als Bild in eine weitere Datenbank bringen, muss aus systemtechnischen Gründen dBase sein.

Aber wie bekomme ich ein Bild, in welchem Format auch immer, in eine solche dBase Tabelle?

Gruß.

Mardin.


neojones - Mi 02.07.03 10:26

Das kommt drauf an, wie Du auf die dBase-Datenbank zugreifst. Unterstützt dBase BLOB-Felder? Dann einfach ein Blob-Feld anlegen. In die Anwendung ein DBPicture einfügen. Dann mit Table1.Edit; die Tabelle in den Edit-Mode setzen. Dann mit DBPicture1.Picture.LoadFromFile('C:\test1.jpg') die Datei laden. Dann mit Table1.Post sichern.

Viele Grüße,

Matthias


hansa - Mi 02.07.03 10:35

Was neojones schreibt, ist schon richtig, aber ich befürchte, mit dBase und Blob Feldern gibt es Ärger, insbesondere wenn Du später umsteigst. Deshalb würde ich nur den Pfad zu den Bildern in der DB speichern als string.


LuckyStrike4life - Mi 02.07.03 10:46

Ist schon richtig Hansa,

muss ja auf Oracle umsteigen. Auch mit dem Thema Blob-Feld hab ich mich schon beschäftigt, aber nirgends eine gute Erklärung gefunden. Schon gar nicht im dicken Delphi 5 Buch von Borland.

Für mich wäre es okay wenn nur die Verweise zu den Bildern gespeichert werden, nur beim Drucken müssen dann halt die Bilder eingesetzt werden.

Wie genau muss ich da rangehen? Gibts n Tutorial dazu oder erklärts mir so einer :nixweiss: ?


Edit:
@neojones

Zitat:
Unterstützt dBase BLOB-Felder? Dann einfach ein Blob-Feld anlegen.


Ansich sollte es das, zumindest wurde das von Borland im Buch mit einem halben Satz erwähnt - also zumindest das es möglich sei.

Aber wie einfach n Blob-Feld anlegen? Wie soll das gehen? Auf die Funktion bin ich noch nicht gestoßen.


UGrohne - Mi 02.07.03 10:56

Ich hatte da maln Tutorial dazu geschrieben:

http://www.delphi-forum.de/viewtopic.php?t=12042

P.S.: Suchfunktion? :nixweiss:


LuckyStrike4life - Mi 02.07.03 11:21

@UGrohne

Ich kenne dein Tutorial, aber es bringt mich nicht weiter, da es für mich nicht verständlich genug geschrieben ist, sorry. Du setzt da nicht direkt am Anfang ein.

Zitat:
Ich verwende eine Beispieltabelle testtabelle mit dem BLOB-Feld blobdata

Was für eine Datenbank hast du da verwendet und wie hast du ein Feld als BLOB-Feld deklariert?

Wenn ich das nicht weiß kann ich dein Beispiel nicht nachbaun, was ich gerne würde, da ich es so sicher besser verstehen könnte.


UGrohne - Mi 02.07.03 11:27

OK, vll. ist das nicht verständlich genug, aber es ist eine Interbase-Datenbank, das BLOB-Feld habe ich einfach mit SQL erzeugt, da heißt der Datentyp einfach BLOB.

Ich weiß halt nicht, ob das so einfach auf dBase zu übernehmen ist, aber grundsätzlich dürfte das Vorgehen ziemlich ähnlich sein.

Grad nachgeschaut: Ich denke, dass MEMO und Binär ziemlich sicher solche BLOB-Felder sind, da sie beliebig groß sein können. Diese Felder kannst Du ja in der Datenbankoberfläche als Datentyp einfügen...

Vll. bringt Dich das dann weiter :wink:


LuckyStrike4life - Mi 02.07.03 11:31

Danke,

ich werd das dann mal jetzt mit deinem Tutorial ausprobieren.

Ich nehme gerne noch Tipps und Ratschläge an 8) .


hansa - Mi 02.07.03 11:48

Noch ein Tip gefällig ?

hansa hat folgendes geschrieben:
... Deshalb würde ich nur den Pfad zu den Bildern in der DB speichern als string.


Später würde ich mir dann irgendwann bei Oracle eventuell vielleicht überlegen, ob die paar Unterschriften tatsächlich in die DB rein müssen. Und vergiss eines nicht: irgendwann müssen die Daten von Dbase nach Oracle geschaufelt werden, oder ist das schon überholt? Und ein Thema: "Wie kriege ich Bilder-Daten aus dBase im Format XY in ein Oracle Blob-Feld" dürfte kaum Antworten bringen.

Schau Dir sowieso lieber mal TImage an.


LuckyStrike4life - Mi 02.07.03 11:59

Hey, warte mal - da hast du recht.

Es ist gar nicht zwingend notwendig die Bilder in die Datenbank zu bringen, es müsste auch funktionieren wenn die Bilder fest im Programm verankert sind. Hm.. na gut, sobald ich hier weg bin hätten die es schwer da was zu aktualisieren, aber das geht schon.

hansa hat folgendes geschrieben:
vergiss eines nicht: irgendwann müssen die Daten von Dbase nach Oracle geschaufelt werden


Ich hab mir den Umstieg zu Oracle doch nicht ausgesucht :bawling: . Das wird schon noch n schönes Problem, aber deine Idee die Bilder nicht in die Datenbank zu bringen sondern so festzuhalten ist perfekt.

Jetzt brauch ich nur noch die Umsetzung...
TImage, werd ich mir ma anschaun.


hansa - Mi 02.07.03 12:07

tsetse, wegen des Themas hier habe ich mir mal TImage angeschaut, denn das steht noch auf meiner Liste mit den "nicht benutzen Komponenten". :shock:

Das ist ja schon fast lächerlich. Du legst das TImage auf die Form und gibst Dateiname an, fertig. Ja, meine Liste ist eben von schwierig bis total einfach sortiert und ich habe oben angefangen. 8)


LuckyStrike4life - Mi 02.07.03 12:51

Ja,

is recht simple. Auch interessant das du alle Komponenten durchgehen möchtest, viel Spaß / Erfolg.

Aber ob TImage die Lösung ist die mich ans Ziel bringt, ist die Frage. Denn angenommen, so wie ich es momentan plane - nach deinem letzten post, und die Bilder nicht in die Datenbank mit aufgenommen werden sollen, müssen diese wo anders liegen. Es ist nicht relevant das man sie sehen kann, sondern ansich sollen sie nur beim ausdrucken ans Tageslicht kommen.

Gedacht war das eigentlich so, die Chefs begutachten die Anfragen der Mitarbeiter, entscheiden ob es okay ist oder nicht und suchen dann, via DBLookupComboBox ihren Namen aus. Die Unterschrift muss dann automatisch gewählt werden zum ausgewähltem Namen.

Ja, dass sind so die Vorstellungen. Daher dachte ich immer an eine extra Datenbank - bin mir nicht sicher ob es auch ohne gehen wird.


hansa - Mi 02.07.03 12:58

Bei mir werden die Bilder hier liegen :mrgreen::


Quelltext
1:
\\Server\MeinProgramm\DB\BILDER                    


und fertig. Riesengroßer Nachteil :lol: dabei ist eben, daß ich nicht nur eine Datei sichern muß, sondern sogar auch noch die Unterverzeichnisse. Da Du aber wohl von dbase her gewöhnt bist, auch die einzelnen DBF,IDX usw. mitzusichern, dürfte es wohl egal sein. Im Crash-Fall müssen die Säcke eben wieder antreten, zum Unterschrift scannen. 8)


LuckyStrike4life - Mi 02.07.03 14:00

Sehr richtig,

so sind zumindest die Bilder gespeichert, dass hätte ich auch hinbekommen, vielleicht :lol: .

Sollten die Unterschriften verloren gehen las ich halt alle ca. 15 Chefs + Stellvertreter herkommen, wie du schon sagtest. Das wird sicher n lustiger Nachmittag :D.
Aber du glaubst doch nicht wirklich das die sich zu mir begeben würden, ich dürfte zu allen hinfahren :evil: .

Naja, aber selbst wenn es so kommen sollte, was solls.

Viel wichtiger, wie bekomme ich es so hin, dass wenn ein Name ausgesucht wurde, automatisch das richtige Bild dazu genommen wird?
Wie gesagt, am besten wäre es über ne LookupComboBox, da ich auch nicht sehr viel Platz aufm MainForm hab, da ich auf 800*600 optimieren muss *argh*.


hansa - Mi 02.07.03 14:12

Ei, ei, ei, indem Du den Dateinamen in der DB speicherst und diese dann so aufruft:


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  Image1.Picture.LoadFromFile(Dateiname);
end;


Aber der Thread macht schon Sinn, wenn ich irgendwann vom Finanzamt oder sonst einem Mikado-Club eine Mahnung kriege, werde ich das anfechten und behaupten, die Unterschrift sei durch Dein Programm entstanden und zwar war das die Putzfrau, die die Tastatur abgewischt hat. :shock:


LuckyStrike4life - Mi 02.07.03 14:40

hansa hat folgendes geschrieben:
Aber der Thread macht schon Sinn, wenn ich irgendwann vom Finanzamt oder sonst einem Mikado-Club eine Mahnung kriege, werde ich das anfechten und behaupten, die Unterschrift sei durch Dein Programm entstanden und zwar war das die Putzfrau, die die Tastatur abgewischt hat. :shock:


:) Damit hast du den getroffen auf dem Kopf Nagel, dass was du angeben würdest ist die Angst von so manchem Chef, die meinen nämlich es könnte sich ja einer der anderen Chefs verklicken und würde damit eine falsche Unterschrift für einen Antrag setzen ... die wollen das ich n Rechtemanagement mit einbaue, nur haben sie vergessen das ich eigentlich nur noch 1 1/2 Wochen Zeit hab, für das Programm. Naja, aber dazu irgendwann mal mehr ... ich denke das ich n Zeitaufschub bekomme. So ist das halt, in nem Mikado-Club 8) .

Dein Code werde ich jetzt gleich mal ausprobieren, schön das du n Bitmap Button genommen hast, machst du das immer?


LuckyStrike4life - Mi 02.07.03 14:58

Also,

soweit nicht falsch was du geschrieben hast, mein QuellCode dafür:


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  Image1.Picture.LoadFromFile('bilder/test.bmp');
end;


Damit bezwecke ich, bisher, aber nur das die Image1 Komponente auf meinem Form das Bild annimmt, sobald auf dem Button geklickt wird. Das ist ja schon mal schön. Das könnte ich sicher auch über ne LookupCombobox machen, indem ich schauen las welcher Name ausgewählt wurde - mit nem bisschen Quelltext, der dann den jeweiligen Pfad rausfindet. (wenn mir jemand n Beispiel dafür schreiben möchte, nur zu!).
Nur wie auch schon gesagt, die Unterschrift muss nicht angezeigt werden, sondern soll später nur druckbar sein. Also müsste ich halt den Pfad in die Datenbank schreiben lassen, so wie du es auch schon meintest und den Report dazu überreden das er nicht den Pfadnamen ausdruckt sondern das Bild an sich.

Ideen?


hansa - Mi 02.07.03 17:33

Zitat:
die Unterschrift muss nicht angezeigt werden, sondern soll später nur druckbar sein


schon klar, wenn eben wieder mikado gespielt werden soll und tatsächlich bewegt sich niemand außer einem, dann hat der eben verloren. :mrgreen:, dann kommt eben eine Unterschrift und danach die Sintflut.


LuckyStrike4life - Do 03.07.03 09:12

Zitat:
wenn eben wieder mikado gespielt werden soll und tatsächlich bewegt sich niemand außer einem


Ja ja,

manchmal hab ich das Gefühl es ist so. Aber es sind natürlich nicht alle untätig, zumindest aus ihrer Sicht nicht :wink: .

Hast du ne Idee wie man dem Report sagen kann das er aus der Datenbank nur die Adresse für das zu druckende Bild bekommt und er das Bild dann auch tatsächlich druckt? Gibt es dafür eine spezielle Komponente, oder eine Eigenschaft von einer Komponente?


hansa - Do 03.07.03 13:17

LuckyStrike4life hat folgendes geschrieben:
...wie man dem Report sagen kann das er aus der Datenbank nur die Adresse für das zu druckende Bild bekommt...


Was nun ? Wo sind die Bilder ? In Datenbank drin, oder als Datei :?:

Aber Du hast doch eh gleich Feierabend. :mrgreen:


LuckyStrike4life - Do 03.07.03 13:57

Die Bilder sind in einer Datei, nicht in der Datenbank.

Zitat:
Aber Du hast doch eh gleich Feierabend.


Nein, ich arbeite immer bis 17:30 :schmoll: . Natürlich sind alle anderen dann schon weg, aber Fließende/Gleitende - Arbeitszeiten sind doch was schönes ... :lol: . Das werde ich später auch vermissen, sobald ich hier weg bin (8 Monate noch).

Edit: Als was arbeitest du eigentlich? Und wie lang? Würde ich gerne mal wissen :!:


hansa - Do 03.07.03 16:17

LuckyStrike4life hat folgendes geschrieben:
Edit: Als was arbeitest du eigentlich? Und wie lang? Würde ich gerne mal wissen :!:


ich arbeite, wenn was zu tun ist und esse wenn ich Hunger habe, nicht etwa, weil es vielleicht 12 Uhr ist. :lol: Und dann noch Umstellung auf Sommerzeit. :mrgreen: