Moderador: Moderadores
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
O replace não funciona porque ele grava na tabela temporária criada pelo "select * from...." e não no banco.
Usuários vendo este fórum: Nenhum usuário registrado online e 3 visitantes