comando sql que nao funciona
Moderador: Moderadores
- filizola
- Usuário Nível 3

- Mensagens: 421
- Registrado em: 19 Ago 2003 20:10
- Localização: Belo Horizonte/MG
comando sql que nao funciona
Utilizando sqlmix o comando update nao funciona.
"Um passo a frente, e já não estará mais no mesmo lugar..."
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
comando sql que nao funciona
Cadê a sintaxe do comando que vc está usando ?
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
comando sql que nao funciona
Observe este exemplo é p/ MySQL mas é a mesma coisa p/ os demais bancos de dados.
Saudações,
Itamar M. Lins Jr.
RDDINFO(RDDI_EXECUTE,"update country set name = '" + cNewName +"' where CODE ='POL'")
Código: Selecionar todos
* RDD SQL DEMO
* Based on Harbour Compiler Contrib Samples
* Adapted for HMG by Roberto Lopez - 2009
* Modified 2009.11.13 by Marek Olszewski "MOL" for testing Record Locking with MySQL
#include "minigui.ch"
#include "dbinfo.ch"
#include "error.ch"
#define DBI_QUERY 1001
#define RDDI_CONNECT 1001
#define RDDI_DISCONNECT 1002
#define RDDI_EXECUTE 1003
#define RDDI_ERROR 1004
#define RDDI_ERRORNO 1005
#define RDDI_NEWID 1006
#define RDDI_AFFECTEDROWS 1007
#define RDDI_QUERY 1008
REQUEST SDDMY, SQLMIX
Function Main
LOCAL hConn
RDDSETDEFAULT("SQLMIX")
IF RDDINFO(RDDI_CONNECT, {"MYSQL", "localhost", "root","123", "TEST"}) == 0
MSGSTOP("Unable connect to the server")
RETURN
ENDIF
CreateTable()
// it's required to use record locking to set autocommit to 0!!!!
RDDINFO(RDDI_EXECUTE,"SET AUTOCOMMIT = 0")
DBUSEAREA( .T.,, "SELECT * FROM country", "country" )
DEFINE WINDOW MAIN ;
ROW 0 ;
COL 0 ;
WIDTH 600 ;
HEIGHT 500 ;
TITLE "RDD SQL - TESTING ROW LOCKING MODIFIED BY 'MOL" ;
WINDOWTYPE MAIN
DEFINE BROWSE browse1
ROW 40
COL 10
WIDTH 470
HEIGHT 330
HEADERS {'Code','Name','Residents'}
WIDTHS {135,155,135}
WORKAREA COUNTRY
FIELDS {'Country->Code','Country->Name','Country->Residents'}
END BROWSE
DEFINE BUTTON B1
ROW 10
COL 10
WIDTH 100
CAPTION "REFRESH"
ACTION REFRESH_BROWSE()
END BUTTON
DEFINE BUTTON B_LOCK
ROW 10
COL 120
WIDTH 100
CAPTION "LOCK 'POL'"
ACTION LOCK_RECORD()
END BUTTON
DEFINE BUTTON RELEASE_LOCK
ROW 10
COL 230
WIDTH 100
CAPTION "RELEASE LOCK"
ACTION RELEASE_lock()
END BUTTON
DEFINE BUTTON MODIFY_POL
ROW 10
COL 340
WIDTH 100
CAPTION "MODIFY 'POL'"
ACTION CHANGE_RECORD()
END BUTTON
END WINDOW
MAIN.Center
MAIN.Activate
Return
************************
STATIC PROC CreateTable()
? RDDINFO(RDDI_EXECUTE, "DROP TABLE country")
? RDDINFO(RDDI_EXECUTE, "CREATE TABLE country (CODE char(3), NAME char(50), RESIDENTS int(11))")
? RDDINFO(RDDI_EXECUTE, "INSERT INTO country values ('LTU', 'Lithuania', 3369600), ('USA', 'United States of America', 305397000), ('POR', 'Portugal', 10617600), ('POL', 'Poland', 38115967), ('AUS', 'Australia', 21446187), ('FRA', 'France', 64473140), ('RUS', 'Russia', 141900000)")
RETURN
************************
function REFRESH_BROWSE
DBUSEAREA( .F.,, "SELECT * FROM country", "country" )
MAIN.BROWSE1.REFRESH
MAIN.BROWSE1.SETFOCUS
return
************************
PROC RDDSYS(); RETURN
************************
FUNCTION LOCK_RECORD
IF RDDINFO(RDDI_EXECUTE,"SELECT * FROM country WHERE CODE='POL' FOR UPDATE")
MsgBox("Locked...")
ELSE
MsgBox("it's not possible to lock record...")
ENDIF
return
************************
FUNCTION RELEASE_LOCK
RDDINFO(RDDI_EXECUTE,"COMMIT")
return
************************
FUNCTION CHANGE_RECORD
local cNewName := ""
RDDINFO(RDDI_EXECUTE,"COMMIT;")
WAIT WINDOW "WAITING FOR LOCK RECORD IN DATABASE..."
IF RDDINFO(RDDI_EXECUTE,"SELECT * FROM country WHERE CODE='POL' FOR UPDATE")
cNewName := AllTrim ( InputBox ( "Enter new name for CODE='POL'" , "Enter new name...") )
RDDINFO(RDDI_EXECUTE,"update country set name = '" + cNewName +"' where CODE ='POL'")
RDDINFO(RDDI_EXECUTE,"COMMIT")
ELSE
MSGSTOP("I can't lock record for CODE='POL'")
ENDIF
WAIT CLEAR
REFRESH_BROWSE()
return
************************
function xtoC
param xValue
local ret
if type("xValue") == "D"
ret := dtoc(xValue)
elseif type("xValue") == "N"
ret := str(xValue)
elseif type("xValue") == "L"
ret := if(xValue,"True","false")
elseif type("xValue") = "C"
ret := xValue
else
ret := ""
endif
return ret
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- filizola
- Usuário Nível 3

- Mensagens: 421
- Registrado em: 19 Ago 2003 20:10
- Localização: Belo Horizonte/MG
comando sql que nao funciona
rddinfo( RDDI_EXECUTE, "UPDATE TABLE country SET name="+'"nomep"'+"where code="+'"codep"')
"Um passo a frente, e já não estará mais no mesmo lugar..."
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
comando sql que nao funciona
http://dev.mysql.com/doc/refman/5.0/en/update.html
Onde é que vc viu essa "TABLE" ? "UPDATE TABLE" é "UPDATE country..." e eu nem uso isso.
Tente um "replace" que acredito deve funcionar também.
Saudações,
Itamar M. Lins Jr.
Onde é que vc viu essa "TABLE" ? "UPDATE TABLE" é "UPDATE country..." e eu nem uso isso.
Tente um "replace" que acredito deve funcionar também.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- filizola
- Usuário Nível 3

- Mensagens: 421
- Registrado em: 19 Ago 2003 20:10
- Localização: Belo Horizonte/MG
comando sql que nao funciona
Desculpe Itamar, nao tem esse "table" nao sô.
rddinfo( RDDI_EXECUTE, 'UPDATE country SET name="&nomep." where code="&codep."' ')
Mas vendo no seu exemplo vi como deve ser feito. Uso dessa forma no vfp e funciona, pensei que fosse a mesma sintaxe.
O replace não funciona porque ele grava na tabela temporária criada pelo "select * from...." e não no banco.
rddinfo( RDDI_EXECUTE, 'UPDATE country SET name="&nomep." where code="&codep."' ')
Mas vendo no seu exemplo vi como deve ser feito. Uso dessa forma no vfp e funciona, pensei que fosse a mesma sintaxe.
O replace não funciona porque ele grava na tabela temporária criada pelo "select * from...." e não no banco.
"Um passo a frente, e já não estará mais no mesmo lugar..."
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
comando sql que nao funciona
Depois vc dá um commit, para descarregar as modificações.O replace não funciona porque ele grava na tabela temporária criada pelo "select * from...." e não no banco.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- filizola
- Usuário Nível 3

- Mensagens: 421
- Registrado em: 19 Ago 2003 20:10
- Localização: Belo Horizonte/MG
comando sql que nao funciona
dbUseArea( .T., , "SELECT * FROM country","country")
nomep=country->name
@ 10,10 say "nome"get nomep
read
repla country->name with nomep
rddinfo( RDDI_EXECUTE, "COMMIT")
nao grava.
nomep=country->name
@ 10,10 say "nome"get nomep
read
repla country->name with nomep
rddinfo( RDDI_EXECUTE, "COMMIT")
nao grava.
"Um passo a frente, e já não estará mais no mesmo lugar..."
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
comando sql que nao funciona
Amiguinho,
O comando correto é REPLACE, não use REPL, REPLA, estas coisas, pois elas podem não estar definidas nos RDDs.
Este lance de usar partes dos comandos é coisa lá do dBase II. A preocupação maior de se criar um RDD é o funcionamento e não compatibilidades antigas.
Quando você comanda um REPLA pode ser, pode ser, que seja acionado o RDD padrão DBF e não o RDD SQL.
O comando correto é REPLACE, não use REPL, REPLA, estas coisas, pois elas podem não estar definidas nos RDDs.
Este lance de usar partes dos comandos é coisa lá do dBase II. A preocupação maior de se criar um RDD é o funcionamento e não compatibilidades antigas.
Quando você comanda um REPLA pode ser, pode ser, que seja acionado o RDD padrão DBF e não o RDD SQL.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.