Datenbanken

Hallo
Zunächst einmal Danke für die letzten Tipps.

Hab jetzt ein neues Problem.
Ich möchte mit einer Visual Basic Anwendung auf eine vorhandene Datenbank zugreifen. Ich kann mich noch erinnern, dass das in JAVA mit einer JDBC:open_mouth:DBC - Bridge funktioniert hat. (korigiert mich wenn ich falsch liege)
Wie kann man das in Visual Basic machen?
Der Datenbanktyp den ich verwende ist ein *.odb
(–> OpenOffice.org Base)

Bitte helfen
Danke im Voraus

Gruß Andreas

Hallo Leute
Hab die Verbindung zur Datenbank bereits aufgebaut. Verwende jetzt eine Acces Datenbank.

Mein neues Problem ist dieses: Ich verwende folgenden Code:

Sub LoadLanguage(Str As String)
Dim RS As String
DBCon.RecordSource = „Select " & Str & " From Sprache“
Do While Not DBCon.Recordset.EOF
RS = DBCon.Recordset.GetString
DBCon.Recordset.MoveNext
MsgBox RS
Loop
End Sub

Wenn ich das ausführe bekomme ich aber eine Fehlermeldung:
Laufzeitfehler ‚91‘:
Objektvariable oder With-Blockvariable nicht festgelegt

Kann mir bitte jemand helfen.
Danke im Vorraus
Gruß Andreas

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

Holla.

Sub LoadLanguage(Str As String)
Dim RS As String
DBCon.RecordSource = „Select " & Str & " From Sprache“
Do While Not DBCon.Recordset.EOF
RS = DBCon.Recordset.GetString
DBCon.Recordset.MoveNext
MsgBox RS
Loop
End Sub

Wenn ich das ausführe bekomme ich aber eine Fehlermeldung:
Laufzeitfehler ‚91‘:
Objektvariable oder With-Blockvariable nicht festgelegt

Schau mal nach, ob und wo DBCon bzw. DBCon.RecordSet definiert sind. Das wären so aus der Lamäng die üblichen Verdächtigen.

Gruß Eillicht zu Vensre

Schau mal nach, ob und wo DBCon bzw. DBCon.RecordSet definiert
sind. Das wären so aus der Lamäng die üblichen Verdächtigen.

Gruß Eillicht zu Vensre

Das DBCon ist ein ADO-Steuerelement

Ich habe jetzt ein wenig rumprobiert und folgenden Code geschrieben:

Sub LoadLanguage(Str As String)
Dim sql$
Dim Value As String
Dim i As Integer

DBCon.ConnectionString = „Provider=Microsoft.Jet.OLEDB.3.51;“ & _
„Persist Security Info=False;“ & _
„Data Source=KUKLinkDB.mdb“

sql = „Select " & Str & " From Sprache“
DBCon.RecordSource = sql
i = 0
Do While Not i = 3
'kleine Zahl zum probieren, dass man das Ende von Recordset
'nicht erreicht
DBCon.Recordset.MoveNext
i = i + 1
Loop
End Sub

Ich bekomme immer noch den selben Laufzeitfehler, bin aber darauf gekommen, dass der Laufzeitfehler erst dann kommt, wenn dieses DBCon.Recordset verwendet wird.

Gruß Andreas

Hi Leute

Ich steh jetzt kurz vor der Verzweiflung.
Ich hab schon jede Menge verschiedene Code-Varianten ausprobiert, aber es will einfach nicht funktionieren.
Es wäre nett, wenn jemand einen Beispielcode schreiben könnte, wie man einen Datensatz von einer Datenbank ausliest und z.B.: In einer Textbox ausgibt.

Danke
mfg Andreas

Hallo Andreas,

ohne das man das ADO Steuerelement naeher kennt, wird dir hier sicherlich kaum jemand weiter helfen koennen.
Was ich mich aber frage, warum du den Zugriff über ein Steuerelement machst und nicht selbst via ADO ? Dort kann man schneller Fehler ausmerzen :smile:
Auch fällt mir folgendes auf. Du öffnest die Datenbank und versuchst auf die DB zuzugreifen. Im Normalfall schaut man nach ob ueberhaupt Datensätze vorhanden sind und setzt dann den Datenbankzeiger auf den 1 Datensatz. Das hast du nicht gemacht. Liegt es vielleicht daran? Gibt es in der Tabelle Sprache ein Feld was sich so schimpft wie du es der Sub übergibst?

MfG Alex

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

Hallo Andreas,

mein Sohn hat zur Übung ein ‚wer-wir-Millionär‘ geschrieben.
Bevor es richtig los ging, haben wir den puren Datenbankzugriff geschrieben und so gesichert. Das könnte Dir helfen, weil jeder Schnickschnack (auch Fehlerbehandlung *g*) fehlt.

Gruß, Rainer

Option Explicit
Dim Db As Database
Dim Rst As Recordset

Private Sub Command1\_Click()
 Dim Fn As String
 Dim Sql As String

 CommonDialog1.ShowOpen
 Fn = CommonDialog1.FileName
 Set Db = OpenDatabase(Fn)
 Sql = "SELECT \* FROM Fragen WHERE Grad = 1;"
 Set Rst = Db.OpenRecordset(Sql)
 Set Data1.Recordset = Rst
 Data1.Recordset.AbsolutePosition = 1
 Command1.Caption = Data1.Recordset(0)
End Sub

Danke Leute

Database ist ein eigener Datentyp, oder?
Wie sieht denn der aus.

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

Danke für eure Hilfe, ich bin jetzt in der Lage Datensätze auszulesen.
Hab jetzt ein neues Problem.

Ich hab in meiner Datenbank eine Tabelle, die Sprache heißt. Dann gibt es die Spalten Deutsch, English, Italiano, …

Ich wollte nach dem Erhalt der Datensätze mein Menü in der entsprechenden Sprache gestalten. Ich habe das mit folgendem Befehl ausgeführt.

mnuFile.Caption = Trim(RecSet.Fields(Str))

Aber die Caption von mnuFile bleibt trotzdem gleich.
(Anmerkung: Der Befehl MsgBox Trim(RecSet.Fields(Str)) gibt das Wort Datei aus)

Habt ihr eine Ahnung woran das liegen könnte?
Danke mfg Andreas

Hallo,

Database ist ein eigener Datentyp, oder?

Nein.

Gruß, Rainer

Hallo,
hast Du in den Verweisen auch den richtigen Typ für ADO angekreuzt?

Gruß
Sina

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

Hallo,

hast Du in den Verweisen auch den richtigen Typ für ADO
angekreuzt?

das muß man nicht. Einfach ein ‚Data‘-Steuerelement auf die Form legen und VB setzt selbst den richtigen Verweis.
(Dann versteht VB auch ‚…As Recordset‘.)

Gruß, Rainer

Hallo Andreas,

der Datenfeld ist als String declariert?
Wenn ja dann probiere mal folgendes.
Ersetze mal die Zeile
mnuFile.Caption = Trim(RecSet.Fields(Str))
durch
mnuFile.Caption = cstr(Trim(RecSet.Fields(Str)))

Geht es nun, dann stricke mal deine Sub folgendermassen um

Private Sub DeinSubnameWoderFehlerAuftritt
On error goto Fehlerbehandlung
'Dein bisheriger Code
exit sub
Fehlerbehandlung:
 msgbox Err.Number & vbnewline & Err.description
 resume next
end sub

Was bekommst du denn nun für eine Fehlernummer aufgelistet und welchen Fehlertext?

MfG Alex

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

Hallo Andreas,

wie ich mitbekommen habe willst du nur über die Datenbank erreichen das du die Sprache nach belieben einstellen kannst. Ich verstehe nicht warum dir das alles so schwer machst :frowning:

Ich selbst würde an die Sache wiefolgt heran gehen.

Erstelle dir eine Resource! In dieser Resource schreibst du alle Meldungen und Caption für die Steuerelemente.
Alles was Deutsch ist, beginnst du mit sagen wir mal 1000
Alles was Englisch ist, beginnst du mit 2000
etc.

Bsp.

1000 Ja
1001 Nein
1002 Abbrechen
1003 Abbrechen der Aktion?

2000 Yes
2001 No
2002 Cancel
2003 Cancel this Operation?
Diese Resourcen Datei bindest du in dein Projekt ein. Vorteil ist! Ein Anwender kann die Daten in einer DB änderen! In einem Resourcen File was du einpflegt hast, nicht mehr! Oder nur sehr schwer :smile: Ausserdem hast du 1 File was du weniger ausliefern musst :smile:

Zum Start ermittelst du die Sprache und je nach Sprache weisst du einer Variablen den Wert zu. In mein Bsp. waere die Variable zum Bsp.
Language als Byte

Deutsch = Language = 1
Englisch = language = 2

Willst du nun einen Text ausgeben ( Fehlermeldung, Info etc.) So musst du lediglich nur die Nummer der Resource wissen. Sagen wir mal du willst die Meldung ausgeben die die Nummer 1003 hat ( Abbrechen der Aktion?)

So lädst du einfach die Resource. Du weisst das es die nummer 1005 hat. Ergo der 5 Eintrag im Resourcen File. Nun lade einfach die Resource Language*1000+5 . Je nach Einstellung bekommst du nun den Deutsch oder Englischen text :smile:
Für die Beschriftung der Steuerelemente, kannst du es ganz einfach so realisieren.

Jedes Steuerelement was du Beschriften willst, weisst du der Tag Eigenschaft eine Zahl zu. Sagen wir mal du hast 2 Schaltflächen! Setze dazu die tag Eigenschaft einmal auf 1 und das andere mal auf 2.
zum Start beschriftest du sie nun.
Dazu mache einfach eine Schleife was alle Controls auflistet. Dort liest du jeweils die Tag Eigenschaft aus, wandelst es um in eine Zahl und errechnest anhand der Zahl und der Sprache die Caption.
Hört sich schwer an, ist es aber nicht :wink:

Bsp.

on Error Resume Next
Dim C as Control
dim x as long
For each c in me
 if c.tag "" then
 x=clng(c.tag)+language\*1000
 end if
Next

Wie du siehst alles ganz einfach und beliebig erweiterbar.

MfG Alex