comando sql que nao funciona

Forum sobre SQL.

Moderador: Moderadores

Avatar do usuário
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

comando sql que nao funciona

Mensagem por filizola »

Utilizando sqlmix o comando update nao funciona.
"Um passo a frente, e já não estará mais no mesmo lugar..."
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

comando sql que nao funciona

Mensagem por Itamar M. Lins Jr. »

Cadê a sintaxe do comando que vc está usando ?

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

comando sql que nao funciona

Mensagem por Itamar M. Lins Jr. »

Observe este exemplo é p/ MySQL mas é a mesma coisa p/ os demais bancos de dados.
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
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

comando sql que nao funciona

Mensagem por filizola »

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..."
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

comando sql que nao funciona

Mensagem por Itamar M. Lins Jr. »

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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

comando sql que nao funciona

Mensagem por filizola »

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.
"Um passo a frente, e já não estará mais no mesmo lugar..."
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

comando sql que nao funciona

Mensagem por Itamar M. Lins Jr. »

O replace não funciona porque ele grava na tabela temporária criada pelo "select * from...." e não no banco.
Depois vc dá um commit, para descarregar as modificações.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

comando sql que nao funciona

Mensagem por filizola »

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.
"Um passo a frente, e já não estará mais no mesmo lugar..."
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

comando sql que nao funciona

Mensagem por rochinha »

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.
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.
Responder