[Risolto] Stampa di un record specifico: Errore di runtime

Discussioni sulle caratteristiche di database
Rispondi
Pmax
Messaggi: 10
Iscritto il: domenica 29 dicembre 2013, 17:20

[Risolto] Stampa di un record specifico: Errore di runtime

Messaggio da Pmax »

Salve a tutti.
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 :crazy:
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
Ultima modifica di Pmax il lunedì 30 dicembre 2013, 5:50, modificato 2 volte in totale.
LibreOffice Versione: 4.1.4.2
Ubuntu 12.04
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Stampa di un record specifico: Errore di runtime Basic

Messaggio da Gaetanopr »

è un errore nell'istruzione sql, devi togliere le doppie virgolette dai nomi dei campi
questa UPDATE "TBCollegamento" SET "TIDOrdine"=3 WHERE "IDCollegamento"=0 .
dovrà diventare

UPDATE TBCollegamento SET TIDOrdine=3 WHERE IDCollegamento=0 .

Le tre righe di istruzioni MySql modifcale in questo modo

Codice: Seleziona tutto

MySql = "UPDATE " & TabColl & " SET " & WriteField & "=" & LookValue & " WHERE " & ChiavePrimaria & "=" & PKFieldValue
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Pmax
Messaggi: 10
Iscritto il: domenica 29 dicembre 2013, 17:20

Re: Stampa di un record specifico: Errore di runtime Basic

Messaggio da Pmax »

Ti ringrazio per l'attenzione.
Avevo già fatto questa prova e la msgbox di controllo mi restituisce:
UPDATE TBCollegamento SET TIDAccettazione= WHERE IDCollegamento=0
Ma purtroppo restituisce anche lo stesso errore. :crazy: :crazy: :crazy:

Eppure il tuo esempio di database, che ho indicato nel precedente post, funziona correttamente !!!!
LibreOffice Versione: 4.1.4.2
Ubuntu 12.04
Pmax
Messaggi: 10
Iscritto il: domenica 29 dicembre 2013, 17:20

Re: Stampa di un record specifico: Errore di runtime Basic

Messaggio da Pmax »

Eh.....e vai !!!!!!
Grazie Gaetanopr...adesso funziona tutto senza errori !!! :bravo: :bravo: :bravo:
Solo una nota: occorre correggere
LookValue
nello script che mi hai fornito con LookupValue altrimenti non trasferisce il numero del record richiesto.
Grazie ancora e Buon Anno !!
LibreOffice Versione: 4.1.4.2
Ubuntu 12.04
Gaetanopr
Volontario
Volontario
Messaggi: 3316
Iscritto il: mercoledì 21 novembre 2012, 20:07

Re: Stampa di un record specifico: Errore di runtime Basic

Messaggio da Gaetanopr »

Non ho usato copia/incolla e ho sbagliato a scrivere il nome della variabile

Buon anno a te
LibreOffice 7.2.2.2 windows 10
Openoffice 4.1.13 su windows 10
Rispondi