Clipper On Line • Ver Tópico - comando sql que nao funciona

comando sql que nao funciona

Discussão sobre SQL

Moderador: Moderadores

 

comando sql que nao funciona

Mensagempor filizola » 06 Nov 2014 19:36

Utilizando sqlmix o comando update nao funciona.
"Um passo a frente, e já não estará mais no mesmo lugar..."
Avatar de usuário

filizola
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 412
Data de registro: 19 Ago 2003 20:10
Cidade/Estado: Belo Horizonte/MG
Curtiu: 5 vezes
Mens.Curtidas: 6 vezes

comando sql que nao funciona

Mensagempor Itamar M. Lins Jr. » 06 Nov 2014 19:55

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

Saudações,
Itamar M. Lins Jr.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6948
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 311 vezes
Mens.Curtidas: 506 vezes

comando sql que nao funciona

Mensagempor Itamar M. Lins Jr. » 06 Nov 2014 20:27

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'")


* 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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6948
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 311 vezes
Mens.Curtidas: 506 vezes

comando sql que nao funciona

Mensagempor filizola » 06 Nov 2014 21:00

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 de usuário

filizola
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 412
Data de registro: 19 Ago 2003 20:10
Cidade/Estado: Belo Horizonte/MG
Curtiu: 5 vezes
Mens.Curtidas: 6 vezes

comando sql que nao funciona

Mensagempor Itamar M. Lins Jr. » 06 Nov 2014 23:41

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6948
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 311 vezes
Mens.Curtidas: 506 vezes

comando sql que nao funciona

Mensagempor filizola » 07 Nov 2014 09:46

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 de usuário

filizola
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 412
Data de registro: 19 Ago 2003 20:10
Cidade/Estado: Belo Horizonte/MG
Curtiu: 5 vezes
Mens.Curtidas: 6 vezes

comando sql que nao funciona

Mensagempor Itamar M. Lins Jr. » 07 Nov 2014 09:55

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.
Avatar de usuário

Itamar M. Lins Jr.
Colaborador

Colaborador
 
Mensagens: 6948
Data de registro: 30 Mai 2007 11:31
Cidade/Estado: Ilheus Bahia
Curtiu: 311 vezes
Mens.Curtidas: 506 vezes

comando sql que nao funciona

Mensagempor filizola » 07 Nov 2014 10:10

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 de usuário

filizola
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 412
Data de registro: 19 Ago 2003 20:10
Cidade/Estado: Belo Horizonte/MG
Curtiu: 5 vezes
Mens.Curtidas: 6 vezes

comando sql que nao funciona

Mensagempor rochinha » 08 Nov 2014 17:39

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 fivolution@hotmail.com. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar de usuário

rochinha
Membro Master

Membro Master
 
Mensagens: 4547
Data de registro: 18 Ago 2003 20:43
Cidade/Estado: São Paulo - Brasil
Curtiu: 806 vezes
Mens.Curtidas: 245 vezes




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 3 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro