Newsgroup: it.comp.appl.access
Titolo: DoCmd.RunSQL non funziona, anzi, mi odia!

Premetto, l'ho odiata fin dall'inizio (farsi 300 righe di query con
qeusta funziona alla fine ti fa cadere... ecco.. mi son spiegato).
Ora... sul mio Access funziona correttamente, sintatticamente, nessun
errore nè di codice, nè di esecuzione, insomma TUTTO ok, su quello a
lavoro no.
La query è questa (con relative variabili):
sqlstring = "SELECT * INTO TABTEMP FROM " & nome_tabella & " WHERE (("
 & nome_tabella &  ".[titolo] LIKE " & Chr$(34) & campo_ricerca &
Chr$(34) & ") OR (" & nome_tabella & ".[argomento] LIKE " & Chr$(34) &
campo_ricerca & Chr$(34) & "));"
richiamata con 
DoCmd.RunSQL (sqlstring)
Da me funziona, prosegue, tutto ok.....
A lavoro si blocca sul Runsql con:
"errore di runtime 3129: istruzione sql non valida prevista delete
insert procedure select o update"
Windows 2000 prof. a lavoro (da me è server), Access 2000 con _tutti_
gli aggiornamenti. Unico punto, da me è installato MS Visual studio
6.0.
Ho provato ad aggiornare con SP3, ado dao vba, fra un pò glì
installallo sql server ma tanto non andrà cmq... 
Mi sapete aiutare please? :( faccina da persona che chiede elemosina)
Grazie a tutti chi rispondera e a chi mi ha letto....
P.S. Il fumo non è dalla ventola del pc, ma dal mio cervello!
Fly

 Fly

sqlstring, cosa ci trovi?
uguale alla mia di casa, ho dato un debug.print ed era identica, le
tabelle sono identiche, il tutto è identico..
stavo pensando.. il Docmd.RunSQL a quale dll/libreria/modulo o quel
che sia è collegato? Magari copiando i miei file con quelli di lavoro
funziona.. Ho provato a sostituire il VBA6 nella cartella dei file
comuni ma dà lo stesso errore...
Sul sito del support di microsoft non risulta niente riguardo a
problemi simili...
Fly

 ha scritto nel messaggio
news:227vuugai0hijasuc...@4ax.com...

Non puoi eseguire Qry SELECT con quel Metodo......!!!
Roberto ti ha suggerito giusto....!!
@Alex

 DoCmd.RunSQL (sqlstring)
cut
Se la richiami con runsql, evidentemente pensi che debba trattarsi di una
query di comando.
Il problema che noto e' che la sintassi non mi sembra quella di access.
Certamente il generatore di query di access non ti ha generato questa
stringa. mi sembra che la sintassi sia per qualche altro motore database.
Se vuoi eseguire una queri di inserimento in access la sintassi e':
INSERT INTO TuaTab SELECT (tabella o valori)
Sib

INSERT INTO TuaTab SELECT (tabella o valori)
Ok, accettando il suggerimento ho provato. Peccato però che in questo
modo non mi seleziona un bel niente, la query non preleva nulla e la
tabella rimane vuota.
Quello che ti chiedo io ora: se la sintassi non è corretta perchè da
me funziona???? La versione di Office è identica: 2000 small business
Fly

Roberto ti ha suggerito giusto....!!
Scusami sarò ignorante... guarda anche la risposta a Sid, ma perchè
non posso se da me funziona? 
Per me "non potere"= "non funziona"....
Scusa ancora se insisto ma non riesco a capirlo... se mi potete
gentilmente spiegare..
La guida mi dà:
SELECT campo1[, campo2[, ...]] INTO nuovatabella [IN databaseesterno]
FROM origine
    FROM origine
non è quello che faccio io?
Fly

 ha scritto nel messaggio
news:YGNH9.60509$3l.16...@twister1.libero.it...

Onestamente mi sembra che quella sia la stringa SQL di una query di
creazione tabella, quindi dovrebbe poter essere eseguita con il metodo
RunSQL. Solo che bisognerebbe accertare cosa contiene quella stringa SQL al
momento che viene eseguito il metodo RunSQL: è per questo che ho chiesto di
verificare cosa contenesse la stringa sqlstring al momento dell'errore.
Inoltre se la stringa sqlstring non contenesse una query di comando l'errore
che dà Access non sarebbe il 3129 ma il 2342: secondo me non contiene
proprio una query, o comunque la prima parola contenuta in tale stringa non
è una di queste: DELETE, INSERT, PROCEDURE, DELETE o UPDATE.


"Sib" <si...@SPAMiol.it> ha scritto nel messaggio
news:aSYH9.35057$fa.11...@news1.tin.it...

Onestamente mi sembra che quella sia la stringa SQL di una query di


"Sib" <si...@SPAMiol.it> ha scritto nel messaggio
news:aSYH9.35057$fa.11...@news1.tin.it...

La sintassi che utilizza Flyzone è corretta ed è riferita a una query di
creazione tabella (vedi scelta da menu Qyery in struttura Query), inoltre
funziona anche in SqlServer2000 se si sostituisce i doppi apici con i
singoli apici, la cosa strana è il diverso comportamento su computer
diversi, suggerisco di sostituire i doppi apici CHR(34) con il singolo apice
in modo da rispettare SQL Ansi92, forse non risolve ma conviene provare.
Ciao Giorgio.

 programmatore avanzato.. ma mi avranno pure insegnato qualcosa, no? :(
E infatti avevo detto "mi sembra". mi sono sbagliato perche' non ho mai
avuto necessita' di usare query di creazione tabella e quindi non ho
riconosciuto subito la sintassi.
cut
Sib

 "Sib" <si...@SPAMiol.it> ha scritto nel messaggio

Non so, penso che puo' trattarsi effettivamente di qualcosa da investigare.
Anche a me e' capitato qualcosa di simile ma al contrario, nel senso che io
d'abitudine preferisco currentdb.execute a docmd.runsql, sia perche'
l'execute non presenta messaggi d'avviso, sia perche' consente l'uso delle
transazioni. Una volta pero' mi e' capitato che l'execute non funzionasse su
un pc mentre il runsql invece si'. non ho avuto il tempo di approfondire.
Sib

"Sib" <si...@SPAMiol.it> ha scritto nel messaggio
news:cp0I9.35873$fa.11...@news1.tin.it...

Prova a sostituire docmd.runsql con currentdb.execute, e' un tentativo ma
non si sa mai.
Sib

 Roberto
Ciao Roberto, non ne sono sicuro, ma mi pareva di aver letto che
con il metodo RunSql l'unico modo di CREARE una TABELLA fosse
di usare CREATE TABLE, questo proprio perchè la parola SELECT
non è contemplata nell'utilizzo del metodo in questione.
Ora, non sò spiegarti perchè, ma sinceramente ho sempre preso
questa notizia come corretta e l'ho riproposta.
Mi spiace non ricordare la fonte...............!
@Alex.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 @Alex.


 Roberto
Si, forse non mi sono capito.....!
Sň che č possibile, ma solitamente usi INSERT....ecc...! non SELECT.
In ogni caso concordo con te, in effetti forse varrebbe la pena indagare
meglio con il DEBUG la reale composizione della STRINGA al
momento dell'esecuzione, e soprattutto quei fastidiosi APICI.
@Alex


non si sa mai.
piccolo particolare, la tabella in cui vado ad inserire  i dati deve
essere sovrascritta.
La query messa in quel modo con execute mi dà errore 3010 "tabella
TABTEMP già esistente"
Non riesco ad accedere alla guida di currentdb.execute (viva gli
errori...)... chiedo scusa, mi sapresti dire che opzione usare in modo
che  sovrascriva la tabella?
Grazie,
Fly

 ha scritto nel messaggio
news:lp35vusro93bb9nbe...@4ax.com...

Ciao Flyzone, il metodo currentdb.execute a differenza di
docmd.RunSql("SELECT * INTO TABTEMP....")  non cancella la tabella di
destinazione quindi devi pensarci tu. Puoi utilizzare il metodo
Currentdb.Execute "DROP TABLE TABTEMP ".
Ciao Giorgio.

docmd.RunSql("SELECT * INTO TABTEMP....")  non cancella la tabella di
Innanzitutto grazie della spiegazione.
Ok provato, la query in sè funziona, ma non dà alcun "estratto".
La stringa finale sarebbe
SELECT * INTO TABTEMP FROM [biblioteca] WHERE (([biblioteca].[titolo]
LIKE "pe*") OR ([biblioteca].[argomento] LIKE "pe*"));
nonostante dovrebbe dare qualche record (e con docmd.runsql lo dà),
con currentdb.execute non dà nessun risultato (da me, a lavoro non ho
ancora provato).
Come si dice... dalla padella alla brace :-|
Fly

 ha scritto nel messaggio
news:29j6vucphjtal4q6f...@4ax.com...

Ciao Flayzone, il metodo currentdb.execute non restituisce recordset come
non lo restituisce il metodo docmd.runsql. Forse ti confondi con il MsgBox
visualizzato dopo il metodo RunSql che dice 'Numero di righe che verranno
incollate in una nuova tabella 10", se è questo MsgBox che ti serve ti
consiglio di insistere sul metodo RunSql che supporta SELECT INTO come
specificato da Help in linea che ti riporto.
******* da help ************
Il metodo RunSQL esegue l'azione EseguiSQL in Visual Basic.
espressione.RunSQL(IstruzioneSQL, UtilizzaTransazione)
espressione   Obbligatorio. Espressione che restituisce uno degli oggetti
indicati nell'elenco Si applica a.
IstruzioneSQL  Elemento Variant obbligatorio. Espressione stringa che
rappresenta un'istruzione SQL valida per una query di comando o per una
query di definizione dati. Utilizza un'istruzione INSERT INTO, DELETE,
SELECT...INTO, UPDATE, CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX o
DROP INDEX. Includere una proposizione IN se si desidera accedere a un altro
database.
UtilizzaTransazione  Elemento Variant facoltativo. Impostare su True (-1)
per includere questa query in una transazione. Impostare su False (0) se non
si desidera utilizzare una transazione. Se si omette questo argomento, viene
utilizzata l'impostazione predefinita, ovvero True.
***************************
In altro caso se desideri leggere il numero dei record trasferiti nella
nuova tabella puoi utilizzare il metodo DCount("*","TABTEMP").
Ciao Giorgio.

 ha scritto nel messaggio
news:29j6vucphjtal4q6f...@4ax.com...

Scusa forse intendi che non viene accodando nessun record, in questo caso ti
consiglio di creare una nuova Query vai in visualizzazione struttura SQL e
incolli la tua stringa di comando, in questo modo puoi controllare meglio
eventuali errori di filtro nella clausola WHERE passando da Query di
Creazione tabella a Query di Selezione (vedi menu Query).
Ciao Giorgio.

consiglio di creare una nuova Query vai in visualizzazione struttura SQL e
Esatto intendevo questo.
Scusa son cretino io... avevo sbagliato ad incollare la query di
RunSQL mettendo il nome della tabella sbagliata ;)
uff stì errori scemi ti fan impazzire e dire che l'avevo ricontrollato
3 volte... ok funziona, vediamo che succederà a lavoro domani.
Fly

in modo da rispettare SQL Ansi92, forse non risolve ma conviene provare.
Mi son dovuto passare tutte le righe con uno script... c'ha messo un
pò ma era proprio quello il problema... quello che vorrei capire è
quale file si potrebbe aggiornare/sostituire per avere un
funzionamento uguale a casa mia, cioè sia con doppi apici che con
singolo apice.
Grazie 1000 
Fly

>Scusa forse intendi che non viene accodando nessun record, in questo caso ti
Ok problema risolto.
Mi sembra più logico usare il Docmd.RunSQL perchè in questo modo non
devo selezionare tra i riferimenti ed evito futuri problemi.
Fly

 ha scritto nel messaggio
news:ced9vu0em8laqth80...@4ax.com...

Se la base dati è la stessa ovvero Database di access a casa e al lavoro non
deve esserci differenza , se al lavoro sei collegato a un Server Sql via
ODBC allora il discorso cambia.
Comunque ti consiglio di abituarti all'uso dell'apice singolo, ti troverai
meglio in futuro.
Ciao Giorgio.

meglio in futuro.
Certamente, l'ho già preso come abitudine :)
Mi sai consigliare qualche link sull'SQL Ansi92?
Fly

 ha scritto nel messaggio
news:9b3cvuomhnpfhiq34...@4ax.com...

Ciao, non conosco Link che trattano Sql Ansi92 in modo specifico, puoi
trovare qualcosa su 
http://www.sqlmag.com/
  o su
http://www.databasejournal.com/
Io prendo le informazioni dal Book On Line (BOL) di SqlServer 2000.
L'ultimo aggiornamento di BOL è scaricabile da
http://www.microsoft.com/sql/techinfo/productdoc/2000/books.asp
Ciao Giorgio.