n° 219
Novembre 2017
Luglio 17, 2018, 11:14:24 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizia:
 
   Indice   Linux Windows Techassistance Gameassistance videogame hardware Aiuto Ricerca Agenda Downloads Accedi Registrati  


* Messaggi recenti
Messaggi recenti
Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: 07001 vi dice niente?!?!  (Letto 3051 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
RAID_PA
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 8


Mostra profilo
« inserita:: Marzo 29, 2005, 01:01:49 »

07001 Parametri Insufficienti. Previsto 1

Un bellissimo errore ma non so proprio come superarlo. La stringa di codice è la seguente.

MSRDC1.SQL = \"SELECT * FROM tabella WHERE colonna =\" & Chr(34) & DBCombo1.text & Chr(34)
MSRDC1.Refresh

Al Refresh dell\'oggetto mi da un errore di run time 40002 seguito dal suddetto 07001. Nella guida dice solo che si tratta di un errore SQL e che il numero del parametro è errato. Allora \"Previsto 1\" a cosa si riferisce?
Aggiungo che invece usando il codice:

MSRDC1.SQL = \"SELECT * FROM tabella WHERE colonna =\'\" & DBCombo1.text & \"\'\"
MSRDC1.Refresh

non compare nessun problema. Sono in parte costretto a usare il codice Chr(34), le virgolette per intenderci, perchè spesso le voci che uso per il paragone (colonna =) hanno l\'apostrofo (\'). Ma ovviamente nel secondo caso se la voce DBCombo1.text contiene apostrofi la query SQL generebbe un errore.
Conoscete un rimedio? Esistono altri comandi in alternativa al Chr(34)?
Vi prego...sono un uomo disperato ;(
Oddio sopravviverò, ma con un altro cruccio in testa :]
Registrato
FoffoLt
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 46


Mostra profilo
« Risposta #1 inserita:: Marzo 29, 2005, 02:01:42 »

A volte è necessario trovare delle escamotage (non so se si scrive così) per risolvere i piccoli problemi...
io una cosa simile l\'ho risolta in questo modo:
con una routine ad hoc ho sostituito nel database, nei campi stringa, tutti gli apostrofi con il ( ` ) che si ottiene con ALT+96. Poi nell\'applicazione che gestisce il dataentry sostituisco eventuali apostrofi che l\'utente potrebbe inserire con il carattere `. a questo punto le query non dovrebbero darti + problemi.
In alternativa puoi usare i doppi apici prima di eseguire la query, esempi de devi cercare D\'Ercole sarà:

text1= \"D\'\'\'Ercole\"
\"SELECT * FROM tabella WHERE colonna =\'\" & text1 & \"\'\"

Sinceramente non ricordo se di apici ne servono 2 o 3, ma non lo uso più da tanto.....
spero di esserti stato utile in qualche modo.
Ciao Alfo.
Registrato
amdbook
Hero Member
*****

Karma: +11/-1
Scollegato Scollegato

Messaggi: 1662



Mostra profilo WWW
« Risposta #2 inserita:: Marzo 29, 2005, 02:05:00 »

...si può anche,semplicemente, usare \"Replace\":

ad esempio:

MsgBox Replace(\"L\'albero\", \"\'\", \"\'\'\")

...visualizzerà \"L\'\'albero\"...funziona...ciao...
Registrato
amdbook
Hero Member
*****

Karma: +11/-1
Scollegato Scollegato

Messaggi: 1662



Mostra profilo WWW
« Risposta #3 inserita:: Marzo 29, 2005, 02:06:20 »

...due risposte in (quasi) contemporanea...  Sorriso)
Registrato
iochico
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 43

0
Mostra profilo
« Risposta #4 inserita:: Marzo 29, 2005, 03:40:14 »

Secondo me l\'errore e\' nell\'uso dell\'operatore \"=\"... se provi ad utilizzare Like al suo posto, vedrai che puoi tenere valido il chr(34) senza problemi.


Ciauz

Chico
Registrato
RAID_PA
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 8


Mostra profilo
« Risposta #5 inserita:: Marzo 29, 2005, 07:16:54 »

Citazione
Postato originariamente da iochico
Secondo me l\'errore e\' nell\'uso dell\'operatore \"=\"... se provi ad utilizzare Like al suo posto, vedrai che puoi tenere valido il chr(34) senza problemi.


Ciauz

Chico


Grazie Chico ma ho provato LIKE in tutte le salse, ma mi duole dirlo LIKE o \"=\" non cambiano il processo. Comunque per cronaca l\'errore scaturisce non appena esegue il Refresh ovvero appena la stringa SQL deve essere effettiva. Ciò scaturisce l\'errore 07001 perchè non gli piace appunto Chr(34)...infatti se lo sostituissi con Chr(39) ovvero l\'apostrofo il problema non sussisterebbe; insomma come se scrivessi:
 colonna = \'\" & Text1.text & \"\'\"
ovvero
 colonna = \" & Chr(39) & Text1.text & Chr(39)
Sono l\'identica cosa, non causa l\'errore 07001 ma non mi effettuerà la query generando un altro errore...il 37000 se non erro!

FoffoLt invece hai colpito appieno nel segno...quella tecnica la usavo in PHP con la fortuna che le veci nella tabella erano statiche, ma in Visual Basic non ho proprio idea di come modificare ogni \' con ` avresti qualche codice di esempio?

Grazie a tutti
Registrato
Max.Riservo
Global Moderator
Sr. Member
*****

Karma: +24/-0
Scollegato Scollegato

Messaggi: 854



Mostra profilo
« Risposta #6 inserita:: Marzo 29, 2005, 10:22:39 »

Il problema è già stato affrontato in un post SQL : vediamo se riesco ad inserire il link :
clicca qui

Notte, Max.
Registrato

I Moderatori invitano tutti gli Utilizzatori del forum a prendere visione del REGOLAMENTO e a rispettarlo.
iochico
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 43

0
Mostra profilo
« Risposta #7 inserita:: Marzo 29, 2005, 10:28:35 »

In effetti sono stato frettoloso nella spiegazione.
Ti riporto pari pari un esempio che funziona alla perfezione sia con gli apici (d\'antona) che con i doppi apici (l\'italianissimo \"arzente\"), da me postato nel forum di un altro sito:
Citazione

Cominciamo con il creare un DataBase Access (c:/db1)

All\'interno del database inseriamo una tabella (Tabella1) con un campo Testo che chiameremo MioTesto.

Inseriamo i seguenti valori nel campo:

d\'antona
da vinci
dell\'orto
dall\'inizio dell\'era glaciale
\"prova doppio apice\"
seconda \"prova doppio apice\"

Poi passiamo alla creazione di un piccolo programma VB, contenente una textbox (text1) e due combobox(combo1 e combo2). Ovviamente nei riferimenti progetto aggiungiamo Microsoft ActiveX DataObjects x.x Library . Lo scopo e\' quello di elencare nella prima combo tutti i campi della tabella che INIZIANO con quanto digitato in textbox, nella seconda combo tutti i campi che CONTENGONO quanto digitato nella textbox.

Option Explicit
Public cn As ADODB.Connection
Public rs As ADODB.Recordset
Private Sub Form_Load()
Dim StringaConn As String
\' Apre la connessione.
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
cn.Open \"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\db1.mdb\" & \";Persist Security Info=False\"
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
Text1.Text = \"\"
End Sub

Private Sub Text1_Change()
If Len(Text1.Text) = 0 Then
    Combo1.Clear: Combo2.Clear: Exit Sub
End If
\'ricerca dall\'inizio campo
rs.Open (\"select * from tabella1 where MioTesto like \" & Chr(34) & Replace(Text1, Chr(34), Chr(34) & Chr(34)) & \"%\" & Chr(34)), cn
Combo1.Clear
If rs.RecordCount Then
    rs.MoveFirst
        Do While Not rs.EOF
            Combo1.AddItem rs!MioTesto
            rs.MoveNext
        Loop
    Else
        Combo1.AddItem \"\"
End If
Combo1.ListIndex = 0
rs.Close
\'ricerca in tutto il campo
rs.Open (\"select * from tabella1 where MioTesto like \" & Chr(34) & \"%\" & Replace(Text1, Chr(34), Chr(34) & Chr(34)) & \"%\" & Chr(34)), cn
Combo2.Clear
If rs.RecordCount Then
    rs.MoveFirst
        Do While Not rs.EOF
            Combo2.AddItem rs!MioTesto
            rs.MoveNext
        Loop
    Else
        Combo2.AddItem \"\"
End If
Combo2.ListIndex = 0
rs.Close
End Sub



L\'ho appena ri-testato (VB6 SP5) e funge che e\' un piacere.

Ciauz

Chico
Registrato
FoffoLt
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 46


Mostra profilo
« Risposta #8 inserita:: Marzo 31, 2005, 05:12:47 »

scusa il ritardo per la risposta,
puoi usare il replace sulla stringa da inserire,
tipo:
text1 = Replace(text1, \"\'\", \"`\")
prima di effetture un nuovo insert o una modifica
ciao Alfo
Registrato
RAID_PA
Newbie
*

Karma: +0/-0
Scollegato Scollegato

Messaggi: 8


Mostra profilo
« Risposta #9 inserita:: Aprile 01, 2005, 02:28:15 »

Eureka
Funge tutto alla grande. Siete stati magnifici. Solo che ora ho un altro problema...ho solo un pacchetto di \"mille grazie\" e il tempo per distribuirli è un po\' scarso...se li metto qui ve ne prendete un po\' l\'uno ok?  :]

Grazie
da RAID

La teoria è quando si sa tutto ma non funziona niente.
La pratica è quandp funziona tutto ma non si sa il perchè.
In ogni caso si finisce sempre a coniugare la teoria con la pratica: non funziona niente e non si sa il perchè.
                                    Albert Einstein
Registrato
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Copyright © 2017 Edizioni Master SpA. p.iva : 02105820787

Tutti i diritti di proprietà letteraria e artistica riservati. - Privacy



powered by Simple Machines