Ho un problema con il Report di un record specifico.
Ho creato un Database MYSQL 6.0 da installare su server in remoto ma che attualmente è presente ed amministrato con PhPMyAdmin sul mio pc in locale.
Il database contiene diverse tabelle ma riassumo con questo esempio il problema che riscontro:
Ho 2 tabelle: A) Cliente B) Ordine collegate tra loro da una relazione 1 a molti. Ho creato un formulario composto dalla tabella Cliente e dalla Subform Ordine.
Per mezzo di una Casella combinata seleziono il Cliente che mi interessa e la Subform si aggiorna con tutti gli ordini che quello specifico cliente ha eseguito durante l'anno.
Adesso vorrei far si che selezionando un ordine specifico nella subform mi si apra un report con i dati dell'ordine selezionato e del Cliente che lo ha eseguito.
Per far questo ho adattato alle mie esigenze l'esempio riportato in questo topic viewtopic.php?f=13&t=4389, ovvero:
.....creare una query con tabella Clienti, Ordini e Tabella di Collegamento dove relazionare solo nella query l'IDOrdine della Tabella Collegamento e della Tabella Ordini, in questo modo verrà visualizzato solo il record presente nella Tabella di Collegamento. Creare un report dalla query in questione.
Inserire un record qualsiasi nella Tabella di Collegamento(solo IDOrdine), che sarà quello che verrà stampato nel report, successivamente tramite una macro si lancia un 'istruzione sql UPDATE che và ad "aggiornare" il record inserito nella Tabella di Collegamento prendendo l'IDOrdine selezionato nel subform, così la Tabella di Collegamento cambiando IDOrdine cambia di conseguenza la query e il report. In buona sostanza la tabella di collegamento conterrà solo e sempre un record(quello selezionato nel subform) cioè quello che si vorrà stampare.
Se eseguo dal mio pc l'esempo allegato nei post (stampa_record_corrente.odb) tutto funziona alla perfezione. Quando però lancio la macro da me adattata ricevo sempre il seguente errore:
Errore di runtime BASIC.
Si è verificata un'eccezione
Type: com.sun.star.sdbc.SQLException
Message: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"TBCollegamento" SET "TIDOrdine"=3 WHERE "IDCollegamento"=0' at line 1.
e la macro si pianta sull'istruzione: oStatement.execute(MySQL) ' INS. DATO IN TABELLA
Eppure la stinga MySQL riporta, credo correttamente, UPDATE "TBCollegamento" SET "TIDOrdine"=3 WHERE "IDCollegamento"=0 .
Ho dato il comando in esecuzione diretta sul database con PhpMyAdmin e funziona in quanto il campo interessato alla modifica viene effettivamente modificato.
In pratica il problema è che il campo TIDOrdine non viene aggiornato.
Confido in un vostro aiuto; sono diversi giorni che non so più dove sbattere la testa
Vi ringrazio per l'attenzione ed auguro a tutti un felice nuovo anno.
Per completezza di informazione allego il listato da me modificato ed utilizzato:
Codice: Seleziona tutto
REM ..... Stampa Record Corrente ........
Sub StampaRecordCorrente(oEvent As Object)
Dim ParentForm As Object
Dim ReadField As Object
Dim ReadFieldName As String
Dim LookupValue As Integer
Dim WriteField As String
Dim TabColl As String
Dim ChiavePrimaria As String
Dim PKFieldValue As Integer
Dim MySQL AS String
Dim oReport As Object
Dim NomeReport As String
Dim oStatement AS Object
NomeReport = "Report_Ordine" ' Nome Report
ReadFieldName = "idOrdine" ' Nome campo subform con idordine
WriteField = "TIDOrdine" ' Nome campo tabella di collegamento da aggiornare
TabColl = "TBCollegamento"
ChiavePrimaria = "IDCollegamento" ' Chiave Primaria tabella di collegamento
PKFieldValue = 0 ' Valore Chiave Primaria pari sempre zero
ParentForm = oEvent.Source.Model.Parent
ReadField = ParentForm.Columns.GetByName(ReadFieldName) ' Campo del subform da dove leggere l'IDOrdine
LookupValue = ReadField.Value ' Servirà per l'update
oStatement = ParentForm.ActiveConnection.CreateStatement
MySQL = "UPDATE """ & TabColl & """"
MySQL = MySQL & " SET """ & WriteField & """=" & LookupValue 'Aggiorna il record con l'IDOrdine preso dal campo del subform
MySQL = MySQL & " WHERE """ & ChiavePrimaria & """=" & PKFieldValue ' Dove la chive primaria e uguale a zero (cioè sempre essendo unico record presente)
PKFieldValue = 0
msgbox MySQL ' MOSTRA IN FINESTRA IL DATO DA MODIFICARE
oStatement.execute(MySQL) ' INS. DATO IN TABELLA
oStatement.Close
oReport = ThisDatabaseDocument.ReportDocuments.GetByName(NomeReport)
oReport.Open
End Sub