Problema macro richiama dati

Discussioni sulle caratteristiche di database
Rispondi
claudia
Messaggi: 28
Iscritto il: mercoledì 10 dicembre 2014, 10:42

Problema macro richiama dati

Messaggio da claudia »

Ciao ragazzi sono tornata per chiedere il vostro aiuto, ho un problema con l'ultima macro ho 3 tabelle malattia, sintomo-malattia e sintomo ho legato in rapporto 1 a n le chiavi primarie(delle tab sintomo e malattia) agli attributi di sintomo-malattia(integer) e quello che mi serve fare con l'uso d questa macro è:
ho la lista dei sintomi in una list box(lista già richiamata con una macro), ora vorrei poter evidenziare più sintomi dalla list box e con una macro chiamare la malattia corrispondente che comparirà in un test box. Qualcuno può aiutarmi a correggere il codice per favore?
questo è il codice:(ho un errore dove segnalato quando provo a farlo funzionare)

Dim Doc As Object
Dim Page As Object
Dim Form As Object
Dim ListBox As Object
Dim TextField As Object
Doc = ThisComponent
Page = Doc.drawPages(1)
Form = Page.Forms.GetByName("FormQuery")
'Call the ListBox to read the selected items
ListBox = Form.GetbyName("Listbox1")
'Call the TextField to write the list of Students
TextField = Form.GetbyName("TextBox1")

'check how many selected items there are
Dim numberArray as Integer
numberArray = ubound(ListBox.SelectedItems())
'Assign this number to two arrays: one to hold Numbers and one to hold Strings
Dim selectedItemsIndexArray(numberArray) As Integer
Dim selectedItemsArray(numberArray) As String ERRORE QUA!!!
'Get the list of selected items. Note this is a number value, e.g. 0, 1, 2
selectedItemsIndexArray = ListBox.SelectedItems()

'iterate in the list to get the String values which were selected
For I = 0 To numberArray
Dim selectedItem As Integer
selectedItem = selectedItemsIndexArray(I)
selectedItemsArray(I)=ListBox.StringItemList(selectedItem)
' MsgBox ListBox.StringItemList(selectedItem)
NEXT I
'connect to database and query all courses on which this students are enrolled
Dim DatabaseContext, DatabaseSource, Connection, Statement, ResultSet As Object
DatabaseContext = createUnoService( "com.sun.star.sdb.DatabaseContext" )
DatabaseSource = databaseContext.GetByName( "smr")
Connection = databaseSource.GetConnection("", "")
Statement = connection.createStatement()

'complex query to select all students who belong to a course
Query = "Select DISTINCT ""SymptomName"" FROM ""Symptom"" LEFT JOIN ""Symptom-illness"" ON ""Symptom-illness"".""Si_Symptom""=""Symptom"".""Symptom_code"" LEFT JOIN ""illness"" ON ""illness"".""illness_code""=""Symptom-illness"".""Si_illness""WHERE"
For I = 0 To numberArray
Query = Query + """Title""='"+ selectedItemsArray(I) + "'"
If I<numberArray Then
Query = Query + " OR "
End If
NEXT I
Query = Query + ";"
ResultSet = Statement.executeQuery( Query )

Dim ResultText As String
'Chr(13) is a line break
ResultText = "The students which are in the selected course(s) are:" + Chr(13)
If Not IsNull(ResultSet) Then
While ResultSet.next
ResultText = ResultText + ResultSet.getString(1) + " " + ResultSet.getString(2) + Chr(13)
Wend
End If
TextField.Text = ResultText

End Sub

Grazie
Claudia
windows openoffice 4.1.1
Avatar utente
Mizio1961
Volontario
Volontario
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: Problema macro richiama dati

Messaggio da Mizio1961 »

Ciao
Se ho ben capito il problema è su Query = "Select DISTINCT ... ?
Se è così penso sia abbastanza normale in quanto difficilmente si riesce a mettere il giusto numero di doppi apici e al posto giusto... Più difficile ancora è poi trovare dov'è l'errore.
L'unica strada possibile è quella di provare l'SQL direttamente, iniziando con la semplice SELECT ... FROM... vedendo se funziona, poi la andrei pian piano a complicare con i LEFT JOIN ecc
La soluzione più corretta è quella di progettare il DB tutto con nomi MAIUSCOLI, senza caratteri strani ne spazi. In questo modo è possibile evitare il ricorso ai doppi apici e risulta tutto più semplice e leggibile
Saluti by Mizio... per ora ;-)
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
claudia
Messaggi: 28
Iscritto il: mercoledì 10 dicembre 2014, 10:42

Re: Problema macro richiama dati

Messaggio da claudia »

Grazie Mizio per la risposta, non so perchè mi dà errore prima di arrivare a SELECT..L'errore è nella sesta riga secondo paragrafo.esce: Inadmissible value or data type.Index out of defined range. Chi può aiutarmi per favore?
windows openoffice 4.1.1
Avatar utente
Mizio1961
Volontario
Volontario
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: Problema macro richiama dati

Messaggio da Mizio1961 »

Ciao Claudia
Facendo girare la macro mi sono accorto di un errore nella select, dove compare il campo Title che non è presente in alcuna delle tabelle del tuo db
Variando tale riferimento con quello giusto, che dovrebbe essere Symptom.SymptomName, il tutto dovrebbe funzionare
Saluti by Mizio
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
vladboscaneanu
Volontario
Volontario
Messaggi: 379
Iscritto il: martedì 22 ottobre 2013, 1:35

Re: Problema macro richiama dati

Messaggio da vladboscaneanu »

Con tutto il rispetto per amico Maurizio,penso che l'errore è dovuto ad un uso incorretto di:

Codice: Seleziona tutto

numberArray = ubound(ListBox.SelectedItems())
Claudia,prova ad inserire subito il comando print numberArray,cosi com'è sotto:

Codice: Seleziona tutto

numberArray = ubound(ListBox.SelectedItems())
print numberArray
e ti uscira -1,
cioè stai per definire la lunghezza di una matrice = -1.
la lunghezza non può essere negativa,solo vuota(),0 o numeri positivi.
LibreOffice ultima versione su Windows 10
claudia
Messaggi: 28
Iscritto il: mercoledì 10 dicembre 2014, 10:42

Re: Problema macro richiama dati

Messaggio da claudia »

Ciao Grazie!quindi quando esce -1 devo schiacciare ok or cancel?cancel se non può essere negativa?
windows openoffice 4.1.1
vladboscaneanu
Volontario
Volontario
Messaggi: 379
Iscritto il: martedì 22 ottobre 2013, 1:35

Re: Problema macro richiama dati

Messaggio da vladboscaneanu »

Devi rivedere di nuovo l'algoritmo che stai usando,per evitare il caso che numberArray sia uguale a -1.
Ad esempio,facendo uscire un messaggio personalizzato di errore,e terminando subito la Sub.
LibreOffice ultima versione su Windows 10
Avatar utente
Mizio1961
Volontario
Volontario
Messaggi: 841
Iscritto il: mercoledì 5 ottobre 2011, 22:55
Località: Roma

Re: Problema macro richiama dati

Messaggio da Mizio1961 »

Ciao
In allegato il file con il programma 'funzionante'. Devi però cercare di apprendere il modo per risolvere determinati errori.
Oltre al problema che ti ha visto vlad, che si verifica quando l'utente preme il bottone senza aver fatto alcuna selezione, ci sono problemi di allineamento nelle Query che possono essere risolti facilmente anche da te.
Se compare il messaggio Colonna ... Non Trovata devi verificare che il nome scritto nella Query e nella macro abbia corrispondenza con il campo della Tabella della banca dati Base da cui lo vuoi selezionare. Lo stesso dicasi per il nome delle Tabelle.

Saluti by Mizio
OpenOffice Windows - Libre su Ubuntu Desktop e Notebook WiFi
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto. ;-)
Rispondi