Bilder aus DB laden

Hallo alle zusammen

Ich brauch mal wieder etwas hilfe oder einen Denk"zettel".

Ich habe eine DB erstellt mit 7 Spalten (die soll später noch erweitert werden)
ID ; Feld1 ; Feld2 ; Feld3 ; Pfad1 ; Pfad2 ; Pfad3
Die Felder sind alle Kontrollkästchen (also mit Häkchen), die Pfadspalten sind mit dem Bildpfad bestückt. In der DB stehen am Ende ca. 100 Zeilen.
Ich möchte, das wenn in Feld1 ein Haken ist das Bild aus Pfad1 angezeigt wird, wenn in Feld2 dann Pfad2 usw. , dann kommt die nächste Zeile dran. Es ist in jeder Zeile immer nur ein Häkchen vorhanden. Die Verbindung zwischen meine Form und der DB soll ohne ADO Steuerelement erfolgen. Die Erweiterung der DB bezieht sich dann auf die Ausgabe wo das Bild auf dem Form erscheinen soll.
Vieleicht hat jemand einen Lösungsansatz für mich.
Bitte wenn möglich nicht all zu kompliziert, sonnst dauerts bei mir etwas länger :frowning:)

Danke im voraus
Marcus

Hallo alle zusammen

Hallo,

Ich brauch mal wieder etwas hilfe oder einen Denk"zettel".

Kein Problem :smile:

Ich habe eine DB erstellt mit 7 Spalten (die soll später noch
erweitert werden)

Warum erst später und nicht gleich? Bevor man ein Programm erstellt sollte ein Konzept stehen. Ergo auch die DB :wink:

ID ; Feld1 ; Feld2 ; Feld3 ; Pfad1 ; Pfad2 ; Pfad3

Die ID ist gut. Dennoch solltest du daran denken ein Feld vom Typ AutoIncrement anzulegen, damit die Datensätze eindeutig identifiziert werden koennen!

Die Felder sind alle Kontrollkästchen (also mit Häkchen), die
Pfadspalten sind mit dem Bildpfad bestückt. In der DB stehen
am Ende ca. 100 Zeilen.

Also das man in einer DB Haeckchen setzen kann ist mir neu!
Eine Datenbank kann Daten von einen gewissen Typ enthalten, jedoch keine Haekchen! Was meinst du genau?
Die grösse Der DB ist eigentlich unrelevant. Ob da nun 100 oder 1000 Datensaetze drinnen stehen, ist egal :wink:

Ich möchte, das wenn in Feld1 ein Haken ist das Bild aus Pfad1
angezeigt wird, wenn in Feld2 dann Pfad2 usw. , dann kommt die
nächste Zeile dran. Es ist in jeder Zeile immer nur ein
Häkchen vorhanden.

Was meinst du bitteschön mit Haekchen? Meinst du evtl, ein Feld vom Typ Boolean, was 1 Bit beansprucht und nur true oder False sein kann?
Was macht dich so sicher das immer nur ein Feld makiert sein kann?
Nehmen wir mal an. Die DB hat wie du sagst 100 Datensaetze. Willst du dann wirklich 100 Bilder anzeigen ? Kannst du auch gewaehrleisten, das die Bilder in den Pfaden vorhanden sind? Was ist wenn dies nicht der Fall ist? Der Anwender löscht ein File, als Bsp.
Wenn du die Bilder ergo mit auslieferst, warum packst du sie nicht gleich mit in die DB oder in eine Ressource ?

Die Verbindung zwischen meine Form und der
DB soll ohne ADO Steuerelement erfolgen.

Was spricht gegen ADO? Wie möchtest du dann auf die Datenbank zugreifen? Mittels DAO ?

Die Erweiterung der
DB bezieht sich dann auf die Ausgabe wo das Bild auf dem Form
erscheinen soll.

Was meinst du denn hiermit genau?

Vieleicht hat jemand einen Lösungsansatz für mich.
Bitte wenn möglich nicht all zu kompliziert, sonnst dauerts
bei mir etwas länger :frowning:)

Eigentlich ist die Lösung relativ simple, nur muss man dann gewisse Sachen wissen.Wie du oben siehst sind viele Sachen nicht geklärt :wink:

Danke im voraus
Marcus

MfG Alex

Hallo Alex!
Erst mal vielen Dank für deine Antwort. Ich versuche mal etwas genauer meinen Fall zu beschreiben.Also ich möchte meine Eisenbahn mit einen Progamm steuern und die Bildchen werden zu einem Gleis zusammengesetzt und sollen je nach Zustand die Farbe wechseln. Nun dachte ich mir , wenn ich die Bilder so einlade gehts vieleicht. Wenn ein Abschnitt besetzt ist , wäre der Haken da (das mit dem Boolean war schon absolut richtig). Die Bilder liegen schon in einem Ordner . In meinem Programm stelle ich das Gleisbild zusammen und dann schreibe ich das in die DB . Und nun stehe ich vor dem Rätzel des auslesens. Es ist also immer nur ein Bild da. Der Haken kommt wenn der Kontakt vom Zug ausgelöst wurde.
Das mit dem ADO Steuerelement meinte ich so ,das ich nicht clicken muß um den nächsten Datensatz anzusprechen, das sollte allein gehen.Bei der erweiterung geht es nur darum das X und Y Koordinate mit gespeichert werden oder andere Programmrelevante sachen.

Hallo Marcus,

also Du möchtest wie mit einer „Lochkarte“ einen Zug fernsteuern…
aber was hat es mit den Bildchen auf sich? Bilder wozu und von was?

Alex

Hallo Alex!
Das Programm für die Eisenbahnsteuerung ist schon fertig und läuft schon, allerdings ist es nicht mit VB6 erstellt. Die Darstellung jetzt erfolgt wie im DOS also nur schwarzer Bildschirm mit weisen Strichen , Zahlen und Buchstaben…
Nun wollte ich das ganze mit einer neuen Oberfläche gestallten.Dazu habe ich nun ein Programm geschrieben und versuche nun das alte mit einzupflegen.Bei diesen Teil habe ich nun eine Picturebox wo die Bildchen hintereinander bzw. untereinander dargestellt sind. Die zeigen den Gleisplan. Die Gleisabschnitte sind alle neutral dargestellt. Nun soll sich immer dieser Teil ändern wo sich ein Zug befindet. Es gibt solche Progamme schon, aber die steuern „nur“ digitale Eisenbahnen und habe keine digitale sondern eine analoge. Und da hinter dem Bildchen viele Info`s stecken dachte ich an die DB. (Info = Blockabschnitt,Gleis,Farbe des Bildes, welches Bild,…)
Nun bin ich kein Progrmmierer sonden mache dies wie einige andere hier auch nur nebenbei. Da können halt alle Anregungen und Hilfen gut sein. Ich kenne auch nicht alle Begriffe wie man z.B. die Zelle nennt im Access wo was drin steht und wenn ich da in der Hilfe nachschauen will, da brauch ich manchmal eher eine Hilfe zur Hilfe. Allerdings ist es auch nicht immer leicht, alles hier im Forum zu beschreiben und zu erfahren.
So nun reichts erst mal,bin über jede Antwort erfreut.
Vieleicht kannst du mir ja weiterhelfen
Danke Marcus

Hallo Marcus,

ich muß auch noch mal etwas zurück fragen.

hast Du denn schon etwas fertig? Die Datenbank? Ein VB-Projekt?
Wie sollen die Bilder denn angeordnet sein? Steht das in der datenbank, wo die Bilder sein sollen? Oder sind es immer gleich viele, oder sollen die immer untereinander erscheinen, egal wie viele es sind?

Wenn ich weiß, was Du brauchst, ist es nicht schwer, Dir das Projekt aufzubauen.

Der blanke Code wird Dir nicht so sehr viel helfen, wenn Du nicht so recht weißt, was Du da tust.

Ein Code, der zwar schon mal läuft, aber sicher nicht das Gelbe von ei ist:

Option Explicit

Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long

Private Sub Timer1\_Timer()
 kill
 Data1.Recordset.MoveFirst
 While Data1.Recordset.EOF = False
 anzeigen
 Data1.Recordset.MoveNext
 Wend
End Sub

Private Sub kill()
 Dim i As Integer
 For i = Picture1.UBound To 1 Step -1
 Unload Picture1(i)
 Next
End Sub

Private Sub anzeigen()
 Dim Pfad As String
 If Data1.Recordset("Feld1") = True Then
 Pfad = Data1.Recordset("Pfad1")
 End If
 If Data1.Recordset("Feld2") = True Then
 Pfad = Data1.Recordset("Pfad2")
 End If
 If Data1.Recordset("Feld3") = True Then
 Pfad = Data1.Recordset("Pfad3")
 End If
 If PathFileExists(Pfad) Then
 Load Picture1(Picture1.UBound + 1)
 Picture1(Picture1.UBound).Picture = LoadPicture(Pfad)
 Picture1(Picture1.UBound).Top = Picture1(0).Top + (Picture1(0).Height \* Picture1.UBound)
 Picture1(Picture1.UBound).Visible = True
 End If
End Sub

Gruß, Rainer

Hallo Rainer!
Danke erst mal für die Antwort.Wie soll ich anfangen, Das Programm für die Steuerung ist fertig und läuft. Jetzt möchte ich die Ausgabeoberfläche verändern. Ich habe nun ein komplett neues Programm geschrieben in dem die Oberfläche das Hauptthema ist. Ich habe nun eine große Picbox auf einem Formular in diesen werden nun die einzelnen Bildchen angeordnet. Die sind vorher als „Blockobjekt“ in einer Klasse deffiniert. Das Problem was ich dabei habe ist, das ich nicht weiss ob und wie es geht das dieses Objekt drei verschiedene Bilder in ein und dem selben Bild anzeigen kann und ob bzw. wie ich diese dann sepparat ansprechen kann. Also hatte ich mir gedacht, ich baue mir das mit der DB, wo ich dann alle Daten abspeichere und diese dann abfrage. Da ja von der Bahn immer eine Rückmeldung über ein Interface zum Rechner kommt, wollte ich die jeweiligen Zustände in der DB mit dem Haken eintragen und sofern sich in der DB was ändert sollten die Datensätze abgefragt werden und die Oberfläche erneuern.
Vieleicht gibt es ja auch eine viel bessere Variante und ich habe mich da verrannt. Wie schon oben beschrieben bei ich kein Progammierer, sondern „Anfänger in zweiter oder fortgeschrittner Stufe“. Alles was ich bis hierhin auf die Beine gestellt habe ist nur aus Büchern zusammengelesen und probiert. Aber es ist ja noch kein Meister vom Himmel gefallen, und ein Hobby ist nr so lange interessant wie es was zu basteln gibt und das Wichtigste „Kein Rückzug - kein Aufgeben“.
Freue mich auf Antwort und den Code werde ich mir genau anschauen, es hilft alles. Also nochmals danke…
Marcus

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Marcus,

Danke erst mal für die Antwort.Wie soll ich anfangen, Das
Programm für die Steuerung ist fertig und läuft. Jetzt möchte
ich die Ausgabeoberfläche verändern. Ich habe nun ein komplett
neues Programm geschrieben in dem die Oberfläche das
Hauptthema ist. Ich habe nun eine große Picbox auf einem
Formular in diesen werden nun die einzelnen Bildchen
angeordnet. Die sind vorher als „Blockobjekt“ in einer Klasse
deffiniert.

oops, das sagt mir nichts, da muß ich mich erst schlau machen. Noch weiß ich nicht, was das ist.

Das Problem was ich dabei habe ist, das ich nicht
weiss ob und wie es geht das dieses Objekt drei verschiedene
Bilder in ein und dem selben Bild anzeigen kann und ob bzw.
wie ich diese dann sepparat ansprechen kann. Also hatte ich
mir gedacht, ich baue mir das mit der DB, wo ich dann alle
Daten abspeichere und diese dann abfrage. Da ja von der Bahn
immer eine Rückmeldung über ein Interface zum Rechner kommt,
wollte ich die jeweiligen Zustände in der DB mit dem Haken
eintragen und sofern sich in der DB was ändert sollten die
Datensätze abgefragt werden und die Oberfläche erneuern.

Das habe ich so weit verstanden. Wie viele verschiedene Bilder gibt es denn, die Du eintragen willst? Wenn es nur wenige sind, macht es keinen sinn, die jedes mal von der Festplatte zu holen.

Vieleicht gibt es ja auch eine viel bessere Variante und ich
habe mich da verrannt. Wie schon oben beschrieben bei ich kein
Progammierer, sondern „Anfänger in zweiter oder
fortgeschrittner Stufe“.

Willkommen im Club, ich auch. :smile:

Sieh Dir den Code erst mal an und erzähle dann, was falsch ist.

Gruß, Rainer

Halo Rainer !

Schläfst du eigentlich auch mal ? Wenn ich auf die Uhrzeit schaue …?

Lass dich bitte nicht von dem Namen „Blockobjektt“ durcheinander bringen. Ich habe im Programm eine Klasse (Block.cls) in der zum Beispiel die Größe des Bildchens drin steht usw. Durch additem werden dann die Bildchen in der Picbox hinzugefügt oder durch remove wieder entfernt. In der Picbox können so ungefähr 800 Bildchen angeordnet werden (40 waagerecht und 20 senkrecht). Die Anzahl der Bildchen in der Picbox ist immer gleich. Von den Bildchen selber gibt es ungefähr 200 Stück. (jedes wird bei Eigenschaften mit 1 KB größe angezeigt). „zum besseren verstehen = 1 Gerade ist 1x waagerecht,1x senkrecht und 2x diagonal - also insgesamt 4x vorhanden in der neutralen Farbe. Nun gibt es sie noch 4x in gelb und 4x in rot - das sind nun schon 12 nur von der Geraden, dann fehlen da noch Kurven ,Weichen usw…“ auf alle Fälle eine Fleißarbeit.
Was schon funktioniert ist das erstellen meiner Picbox oder besser gesagt das befüllen mit den Bildchen in der neutralen Farbe. Zur Kontrolle für mich habe ich die Werte z.B. X und Y Koordinate und Bildpfad in einer Text Datei abgespeichert. Dort steht ja aber nur der Pfad und Bild vom neutralen Bild drin und nicht automatisch auch das Gelbe und das Rote. Nun dachte ich wenn ich das Bild Gerade z.B. „neutral = 1 , gelb = 101 , rot = 1001“ benenne und das Bild Kurve „neutral = 2, gelb = 102 ,rot 1002“ usw. dann könnte ich das erste neutrale Bild in der DB abgespeichert unter Pfad1 und dann unter Pfad2 „bloß“ 100 dazuaddiert bzw. Pfad3 1000. Dann hätte ich alle Bildchen drin und muß sie dann entsprechend der Häckchen wieder auslesen.
Die Picbox könnte ja dann auch jedesmal neu erstellt werden, weil die Eisenbahn ja auch jedesmal anders aussieht. (Modulanlage) Die Werte für die Züge werden zu Beginn sowieso abgefragt und gegebenenfals korrigiert. So könnte man ja auch z.B. die Häkchen gesondert setzten oder entfernen. Das Bild in der Steuerung soll ja auch nicht ständig abgefragt werden sondern nur ,wenn sich in der DB ein Wert ändert, also ein Zug fährt von einen Block in den nächsten.
Code habe ich noch nicht angeschaut muß erst abwaschen, sonst gibts Ärger…
Mach ich aber gleich danach.
Danke erstmal wieder
Marcus

Hallo Marcus,

Schläfst du eigentlich auch mal ? Wenn ich auf die Uhrzeit
schaue …?

gelegentlich schon, aber immer so, daß es Niemand bemerkt. :smile:

Lass dich bitte nicht von dem Namen „Blockobjektt“
durcheinander bringen. Ich habe im Programm eine Klasse
(Block.cls) in der zum Beispiel die Größe des Bildchens drin
steht usw.

OK, das muß ich dann nicht verstehen. Ich verwende in meinen Beispielen einfach Steuerelementefelder für die Bilder, wie Du das Bild an die richtige Stelle bekommst, weißt Du dann ja selbst.

Durch additem werden dann die Bildchen in der
Picbox hinzugefügt oder durch remove wieder entfernt. In der
Picbox können so ungefähr 800 Bildchen angeordnet werden (40
waagerecht und 20 senkrecht). Die Anzahl der Bildchen in der
Picbox ist immer gleich.

OK. Es gibt eben immer mehrere Möglichkeiten so ein Problem zu lösen, Deine scheint für diesen Fall sehr gut zu sein.

Von den Bildchen selber gibt es
ungefähr 200 Stück. (jedes wird bei Eigenschaften mit 1 KB
größe angezeigt). „zum besseren verstehen = 1 Gerade ist 1x
waagerecht,1x senkrecht und 2x diagonal - also insgesamt 4x
vorhanden in der neutralen Farbe. Nun gibt es sie noch 4x in
gelb und 4x in rot - das sind nun schon 12 nur von der
Geraden, dann fehlen da noch Kurven ,Weichen usw…“ auf alle
Fälle eine Fleißarbeit.
Was schon funktioniert ist das erstellen meiner Picbox oder
besser gesagt das befüllen mit den Bildchen in der neutralen
Farbe. Zur Kontrolle für mich habe ich die Werte z.B. X und Y
Koordinate und Bildpfad in einer Text Datei abgespeichert.
Dort steht ja aber nur der Pfad und Bild vom neutralen Bild
drin und nicht automatisch auch das Gelbe und das Rote. Nun
dachte ich wenn ich das Bild Gerade z.B. „neutral = 1 , gelb =
101 , rot = 1001“ benenne und das Bild Kurve „neutral = 2,
gelb = 102 ,rot 1002“ usw. dann könnte ich das erste neutrale
Bild in der DB abgespeichert unter Pfad1 und dann unter Pfad2
„bloß“ 100 dazuaddiert bzw. Pfad3 1000. Dann hätte ich alle
Bildchen drin und muß sie dann entsprechend der Häckchen
wieder auslesen.

Ja, das klingt gut. In anderen Fällen werden da statt Ziffern Bits verwendet, dann ist es leichter, aus der zahl wieder zurück zu rechnen, die auszuwerten, aber das brauchst Du ja nicht. Dein Weg klingt logisch und übersichtlich.

Die Picbox könnte ja dann auch jedesmal neu erstellt werden,
weil die Eisenbahn ja auch jedesmal anders aussieht.
(Modulanlage) Die Werte für die Züge werden zu Beginn sowieso
abgefragt und gegebenenfals korrigiert. So könnte man ja auch
z.B. die Häkchen gesondert setzten oder entfernen. Das Bild in
der Steuerung soll ja auch nicht ständig abgefragt werden
sondern nur ,wenn sich in der DB ein Wert ändert, also ein Zug
fährt von einen Block in den nächsten.

Da mußt Du Dir ein anderes Ereignis suchen, ich wüßte nicht, wie die Änderung der Datenbank ein Ereignis auslösen soll. Wer ändert die Datenbank wann und wie? Ein anderes Programm, oder dieses Programm auf Mausklick o.ä.?

Code habe ich noch nicht angeschaut muß erst abwaschen, sonst
gibts Ärger…

*gg* Ich muß erst mal gleich in die Küche, etwas kochen, am WE ist das mein Job. :smile: Dafür geht mich der Abwasch nichts an.

Gruß, Rainer

Hallo Rainer!

Da gehts den Menschen wie den Leuten…

Fürs kochen war ich auch zuständig und dann haben die Frauen ständig noch was zu meckern. :frowning:)

Naja was solls der Abwasch ist fertig.

Das als Steuerelementefeld ist auch eine gute Idee. So ähnlich hatte ich schon mal angefangen. Ich hatte ein Frame auf mein Formular gezogen und dort kleine Picboxen angeordnet. Es waren 5 dieser Frame’s und wenn ich diese ausgeblendet habe dann waren somit ja auch alle Bildchen verschwunden. Bis zum einlesen des Bildes bin ich aber nicht gekommen.Bei Picbox Nummer 496 oder so ähnlich war Feierabend da kam immer Laufzeitfehler 7 „Nicht genügent Speicher“ . Wenn es hilft oder wenn ich darf sende ich dir auch mal das Programm oder wenigstens einen Teil. (Ich glaube zwar, das wir uns dann hier nicht mehr schreiben, weil du dann mit aufräumen im Programm, oder Hände über den Kopf zusammenschlagen, nicht mehr fertig wirst. Oder die Ohrfeige kommt gleich durch die Telefondose)
So jetzt schaue ich mir erst mal den Code an.
Achso, die Antwort mit dem Code hatte ich nicht als Mail erhalten aber man kann ihn ja auch herauskopieren. ich glaube aber der fehler lag bei mir , ich hatte das Häkchen vergessen.
Marcus

Hallo Marcus,

Wenn es hilft
oder wenn ich darf sende ich dir auch mal das Programm oder
wenigstens einen Teil.

ja, mail mal, das beschleunigt die Aktion bestimmt. Wenn dann etwas heraus kommt, was für andere interessant sein kann, kannst Du’s ja immer noch hier posten.

Gruß, Rainer

Hallo Markus,

wenn Du viele Bilder anzeigen willst, aber nicht so viele Steuerelemente verwenden, genügt für die Anzeige ein Bild, wenn Du das scrollen willst ein zweites, in dem Du das erste unter bringst und verschiebst. In ein drittes, unsichtbares kannst Du die Bilder laden und mit PaintPicture in das erste schreiben. Beispiel:

Option Explicit

Private Sub Command1\_Click()
 Dim c As Long, r As Long
 Picture2.Picture = LoadPicture("C:\TestBild.bmp")
 For c = 0 To (Picture1.Width / Picture2.Width) - 1
 For r = 0 To (Picture1.Height / Picture2.Height) - 1
 Picture1.PaintPicture Picture2.Picture, c \* Picture2.Width, r \* Picture2.Height
 Next
 Next
End Sub

Gruß, Rainer

Hallo Rainer!

Habe gestern nicht im Forum nachschauen können.Doch heute nehme ich mir die Zeit. Danke wiedermal für die Antwort.Werde mir den kleinen Code aber erst morgen unter die Augen reiben. Habe die ganze Woche Spätschicht und komme daher nur früh an den Rechner.Gestern habe ich noch den Code bei mir aus dem Progamm gezogen. Den schick ich dir gesondert und melde mich dann. Bis dahin …
Danke Marcus