Problem mit Listenfeld

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Problem mit Listenfeld

von jecu » Do, 12.01.2006 09:52

hallo Thomas!

hab das mit dem zeiger beim feld-auslesen beherzigt und es klappt! :D

also di id ist als integer definiert, kann aber sowohl mit getString als auch mit getInt ausgelesen werden. hängt viell. an der mysql-datenbank.

gruß

jens

von jecu » Mi, 11.01.2006 16:41

hallo thomas!

danke für die tipps, werde sie mal später versuchen umzusetzen.

mache momentan ein praktikum und da muss ich jetzt eben auch was an makros pfuschen, was ich mir vorher auch net aussuchen konnte. :wink:

mit solchen problemstellungen hätte ich auch sonst net angefangen; aber mit dem im trüben fischen hast du schon recht; mir bleibt aber wie gesagt momentan auch nix anderes übrig.

werd mich da wohl durchkämpfen müssen.

schon mal danke für deine mühe und geduld... !

gruß

jens

von Toxitom » Mi, 11.01.2006 16:34

Hallo Jens,

das ist das Problem, wenn man im "Trüben" stochert.
einen kleinen fehler berichtigt (muss end if anstatt end do heißen)
OK, da ist wirklich ein Fehler drin. Aber nicht so, wie du den darstellst:
Es fehlte ein "end if" nach der Zeile "exit do". Die Zeile "exit do" ist notwendig, sonst könntest du eine Endlosschleife erhalten.

nimmt intID keine werte an
Nun, ich ging davon aus, dass "intID" eine Zahl (Integer) sein soll und dass die auch so in der Datenbank steht.
Wenn du aber diese mit "getString(2) " ausliesen kannst, sind das eben keine Zahlen sondern Strings - also Texte!
Dann musst du natürlich auch die Zeile

Code: Alles auswählen

intID = objResultSet1.getInt(2) 
insofern ändern:

Code: Alles auswählen

intID = objResultSet1.getString(2) 
Denn sonst kommt da immer "0" raus.

Das bringt dir auch den Fehler im nächsten Code:

Code: Alles auswählen

 msgBox objResultSet3.getInt(1) 
Auch hier wird versucht, eine Integer-Variable auszulesen, du hast aber einen wohl String dafür definiert .
Im Übrigen fehlt der Zugriff auf den ersten Array des Resultsets. Mit "objResultSet3" erhälst du das Objekt eines Resultsets, also quasi einer Tabelle mit Spalten und Zeilen. Pro Zeile ein Datensatz.
Jetzt musst du den Resultset-Zeiger erst mal auf einen speiellen Datensatz plazieren, bevor du mit .getIrgendetwas(Spalte) den Spaltenwert auslesen kannst.
Tia, du siehst, das sind alles Grundlagen - und kaum in einem kurzen Post zu vermitteln. Warum suchst du dir denn auch gleich so mit das komplizierteste der Basic-Programmierung raus, und das, um zu beginnen
:wink:

Gruss
Thomas[/code]

von jecu » Mi, 11.01.2006 14:15

habe jetzt mal was anderes versucht und folgendes segment eingefügt:

objConnection3 = _
objDataSource.ConnectWithCompletion(objInteractionHandler)
objStatement3 = objConnection3.createStatement()
objResultSet3 = _
objStatement3.executeQuery("SELECT `ID` FROM `Daten`.`Firmen` `Firmen` WHERE ( ( `NA1` = '" & strFirma & "' ) )")

msgBox objResultSet3.getInt(1) ********

doch leider bringt er mir da in der reihe mit den sternchen folgenden fehler:

Basic Laufzeitfehler. Es ist eine Exception aufgetreten Type:com.sun.star.sdbc.SQLException Message:[Microsoft][ODBC Driver Manager] Ungültiger Cursorstatus

das attribut ID ist in der Datenbank übrigens mit integer auto increment deklariert worden; den sql-befehl habe ich so aus openoffice kopiert und mit der variable modifiziert.

weiß jetzt auch net, warum dieser fehler erscheint

gruß

von jecu » Mi, 11.01.2006 13:53

hallo thomas!

vielen dank für deine hilfe und dafür, dass du dich mal durch den code durchgewühlt hast!

hab den code mal eingebaut und einen kleinen fehler berichtigt (muss end if anstatt end do heißen); doch leider nimmt intID keine werte an; hatte mir die variable in einer messagebox anzeigen lassen, sie besitz aber immer den wert 0. wenn ich in das listenfeld mit getString(2) auslese, bekomme ich auch die korrekten ID´s, daran liegt es also nicht.

hast du vielleicht noch ne idee?

hast recht: 100%-ig versteh ich net alles im detail, aber der codeaufbau im allgemeinen ist mir schon klar. :wink:

gruß

jens

von Toxitom » Mi, 11.01.2006 11:42

Hey Jens,
weiß denn wirklich niemand rat?
Doch. Aber das ist ja richtige Arbeit. Ewig langer Code-Post, und - ich denke, du weisst gar nicht so genau, was du da machst. Wo soll man denn da ansetzen?

Code: Alles auswählen

lstListe = Dlg.getControl("ListBox2")
intPos = lstListe.selectedItemPos

If intPos > -1 Then
strFirma = lstListe.selectedItem(1)
MsgBox "Sie haben " & strFirma & intID & " ausgewählt!"
End If 
Da zwischen muss dein Auslesen. Dein result-Set besteht aus einem Array mit jeweils zwei elementen - der Fimar und der ID. Du musst also die richtige Zeile des Resultsets finden - dann hast du deine ID - vorausgesetzt, der Name der Firma ist auch eindeutig!
Z.B.:

Code: Alles auswählen

flag = true
do while objResultSet1.next
   if objResultSet1.getString(1)=lstListe.selectedItem(1) then
       intID = objResultSet1.getInt(2)
       exit do
loop  
Da müsstest du aber noch ein paar Prüfkriterien einbauen und Fehler abfangen.

So, jetzt bleibt natürlich die Frage, ob du damit tatsächlich etwas anfangen kannst?

Viele Grüße
Thomas

von jecu » Mi, 11.01.2006 11:06

hallo!

weiß denn wirklich niemand rat? komme bei dem problem wirklich net weiter.
bin für jeden tipp/anregung dankbar.

gruß

jens

Problem mit Listenfeld

von jecu » Mo, 09.01.2006 11:52

hallo zusammen!

habe folgendes problem:

mit hilfe eines makros können aus einer datenbank firmen und anschließend die zu einer bestimmten firma gehörenden kontaktpersonen ausgewählt werden (mit hilfe von listenfeldern), was auch ohne probleme funktioniert. nun sollen die ausgewählten daten (firmen und dazugehörige kontaktperson) in einer anderen tabelle gespeichert werden, jedoch nicht mit ihren namen, sondern ihren id´s, die ihnen natürlich vorher in den tabellen zugewiesen wurden.

hier liegt nun das problem: habe die id´s mit dem select-sql-befehl mit ausgelesen, aber wie kann ich die id zu einer firma herauslesen, die ich vorher in einem listenfeld ausgewählt habe?

hier mal mein bisheriger code:

Sub DialogStart

Dim objDatabaseContext As Object
Dim objDataSource As Object
Dim objConnection As Object
Dim objConnection1 As Object
Dim objInteractionHandler as Object
Dim objStatement As Object
Dim objStatement1 As Object
Dim objResultSet As Object
Dim objResultSet1 As Object
Dim i As integer
Dim j As integer
Dim lstListe As Object
Dim lstListe1 As Object
Dim intPos As Integer
Dim intPos1 As Integer
Dim strFirma As String

i = 1
j = 1

objDatabaseContext = _
createUnoService("com.sun.star.sdb.DatabaseContext")
objDataSource = objDatabaseContext.getByName("Linux4")
If Not objDataSource.IsPasswordRequired Then
objConnection = objDataSource.GetConnection("","")
Else
objInteractionHandler = _
createUnoService("com.sun.star.sdb.InteractionHandler")

objConnection = _
objDataSource.ConnectWithCompletion(objInteractionHandler)
End If


objConnection1 = _
objDataSource.ConnectWithCompletion(objInteractionHandler)
objStatement1 = objConnection1.createStatement()
objResultSet1 = _
objStatement1.executeQuery("Select `NA1`, `ID` FROM `Daten`.`Firmen` `Firmen` Order By `NA1` Asc")


DialogLibraries.LoadLibrary("Standard")
Dlg = CreateUnoDialog(DialogLibraries.Standard.Dialog1)
Dlg.Title = "Personenauswahl"



If Not IsNull(objResultSet1) Then
While objResultSet1.next
Dlg.getControl("ListBox2").addItem(objResultSet1.getString(1),j)
j = j+1
Wend
End If



Dlg.Execute()

lstListe = Dlg.getControl("ListBox2")
intPos = lstListe.selectedItemPos

If intPos > -1 Then
strFirma = lstListe.selectedItem(1)
MsgBox "Sie haben " & strFirma & intID & " ausgewählt!"
End If

objStatement = objConnection.createStatement()
objResultSet = _
objStatement.executeQuery("SELECT `Personen`.`Name` FROM `Daten`.`Firmen` `Firmen`, `Daten`.`Personen` `Personen` WHERE ( `Firmen`.`ID` = `Personen`.`Arb` ) AND ( ( `Firmen`.`NA1` = '" & strFirma & "') ) ORDER BY `Personen`.`Name` ASC")

If Not IsNull(objResultSet) Then
While objResultSet.next
Dlg.getControl("ListBox1").addItem(objResultSet.getString(1),i)
i = i+1
Wend
End If

Dlg.Execute()

lstListe1 = Dlg.getControl("ListBox1")
intPos1 = lstListe1.selectedItemPos

If intPos1 > -1 Then
strPerson = lstListe1.selectedItem
MsgBox "Sie haben als Kontaktperson der Firma " & strFirma & Chr(13) & strPerson & " ausgewählt!"
End If

REM objConnection2 = _
REM objDataSource.ConnectWithCompletion(objInteractionHandler)
REM objStatement2 = objConnection2.createStatement()
REM objResultSet2 = _
REM objStatement2.executeUpdate("INSERT INTO `Daten`.`Testangebeote` (`Firma`, `Person`) VALUES ('2', '3')")

objResultset.Close()
objResultset1.Close()
objStatement.Close()
objConnection.Close()

End Sub

bin auch nur mako- und basic-neuling, habe mir dieses programm mit hilfe eines buches zurechtgesucht. leider steht da zu meinem beschriebenen problem nix drin.

hoffe mir kann jemand von euch helfen!

gruß

Jens

Nach oben