Página 1 de 1

Comando delete com sqllib

Enviado: 21 Dez 2010 09:58
por gilsonpaulo
Comando não pega valor da variavel >:

Código: Selecionar todos

	select cadcli
		registro=cadcli->sql_rowid
		if .not. empty(razcli)
			op=msgbox2("CONFIRMA EXCLUSAO DO CLIENTE?" )
			if op=1
				csql:="delete from cadcli where sql_rowid="'+registro+'""
				sqlexecute(csql)
				sqlexecute( "commit" )
			endif				
  	  endif
Assim funciona.:

Código: Selecionar todos

	select cadcli
		registro=cadcli->sql_rowid
		if .not. empty(razcli)
			op=msgbox2("CONFIRMA EXCLUSAO DO CLIENTE?" )
			if op=1
				csql:="delete from cadcli where sql_rowid=10"
				sqlexecute(csql)
				sqlexecute( "commit" )
			endif				
  	  endif
Só falta isso, com insert e update funciona as variaveis.

Re: Comando delete com sqllib

Enviado: 21 Dez 2010 10:07
por alxsts
Olá!

Talvez existam brancos à esquerda na variável onde você armazena a chave (supondo que ela seja do tipo caracter). Tente:

Código: Selecionar todos

registro := LTrim( cadcli->sql_rowid )

Re: Comando delete com sqllib

Enviado: 21 Dez 2010 10:21
por Toledo
gilsonpaulo escreveu:="'+registro+'""
Bom, não sei se foi erro de digitação, mas note que tem aspas duplas junto com aspas simples.

Abraços,

Re: Comando delete com sqllib

Enviado: 21 Dez 2010 10:39
por Maligno
não sei se foi erro de digitação, mas note que tem aspas duplas junto com aspas simples.
Estão apenas em ordem errada. Uma constante string precisa ser envolta em aspas simples. Logo,...

Código: Selecionar todos

csql := "delete from cadcli where sql_rowid= ' " + registro + " ' "
(Botei alguns espaços deliberadamente, pra tornar mais fácil perceber as aspas.)

Supondo que o tal "registro" seja realmente uma string. Mas como o OP diz que a segunda tentativa deu certo usando uma constante numérica, a história muda. Aí deve-se converter a variável "registro" para string (eliminando os espaços, como bem observou o Alexandre) e remover essas aspas simples; apenas somando tudo. Acho que não é preciso fazer um exemplo.

Re: Comando delete com sqllib

Enviado: 21 Dez 2010 10:46
por Toledo
gilsonpaulo escreveu:Assim funciona.:
...
csql:="delete from cadcli where sql_rowid=10"
Então eu acho que não deve ser string não! Neste caso teria que retirar as aspas simples.

Abraços,

Re: Comando delete com sqllib

Enviado: 21 Dez 2010 10:59
por gilsonpaulo
Ok, muito obrigado, funcionou.

fiz assim para testes.:

Código: Selecionar todos

		if .not. empty(razcli)
			op=msgbox2("CONFIRMA EXCLUSAO DO CLIENTE?" )
			if op=1
				csql:="delete from cadcli where razcli='"+cadcli->razcli+"'"
				sqlexec(csql)                                   
				sqlexecute( "commit" )
			endif				
  	  endif
Segue codigo, estou testando a sqllib do Vailton, mas quero utilizar comandos sql.

Código: Selecionar todos

#include 'sqllib.ch'

function clientes()

telacli=savescreen(00,00,31,97)

cSQL:= "select * from cadcli order by sql_rowid"
select 1
use sql (csql) alias cadcli
go top

telcli()

do while .t.

	set cursor off
	setcolor("7/1,7/1")
	
	@ 03,09 say sql_rowid
	@ 03,35 say razcli
	@ 04,16 say fancli
	@ 04,72 say tippes
	@ 04,93 say blocli
	@ 06,06 say cepcli picture "@R 99999-999"
	@ 06,27 say endcli
	@ 06,87 say padr(numero,04)
	@ 07,11 say baicli
	@ 07,51 say cidcli
	@ 07,87 say ufcli
	if tippes = "FISICA"
		@ 08,11 say cpfcnpj picture "@R 999.999.999-99"
	else
		@ 08,11 say cpfcnpj picture "@R 99.999.999/9999-99"
	endif        
	@ 08,40 say inscrg
	@ 08,71 say contato
	@ 09,11 say fonecli picture "@R (99)9999-9999"
	@ 09,31 say faxcli picture "@R (99)9999-9999"
	@ 09,55 say celcli picture "@R (99)9999-9999"
	@ 09,78 say nextel
	@ 10,08 say email
	@ 10,59 say website
	
	ik=0

	ik = inkey(0)

	if ik=27
		restscreen(00,00,31,97,telacli)
		exit
	elseif ik=5
		skip -1
		ik = 0
 	elseif ik=24 
		skip 
		ik = 0
	elseif ik = 6
		go bottom
	elseif ik = 1
		go top
	elseif ik = 105 .or. ik = 73
		icadcli()
		atucadcli()
	elseif ik = 68 .or. ik = 100
		select 1
		use
		cSQL:= "select * from cadcli order by sql_rowid"
		select 1
		use sql (csql) alias cadcli
		go top
	elseif ik = 78 .or. ik = 110
		select 1
		use
		cSQL:= "select * from cadcli order by razcli"                           
		select 1
		use sql (csql) alias cadcli
		go top
	elseif ik = 69 .or. ik = 101
		if .not. empty(razcli)
			op=msgbox2("CONFIRMA EXCLUSAO DO CLIENTE?" )
			if op=1
				csql:="delete from cadcli where razcli='"+cadcli->razcli+"'"
				sqlexec(csql)                                   
				sqlexecute( "commit" )
			endif				
  	  	endif
	else
		tone(300)
	endif

	if eof()
		skip -1
		registro=sql_rowid
	endif

	if bof()
		go top
		registro=sql_rowid
	endif
enddo
select 1
use
return
*************************************************************************************************
function icadcli()

local	irazcli:=space(61),ifancli:=space(40),itippes:=space(08),iblocli:=space(03),;
		icepcli:=space(08),iendcli:=space(50),inumero:=space(04),ibaicli:=space(30),icidcli:=space(30),;
		iufcli:=space(02),icpfcnpj:=space(14),iinscrg:=space(20),icontato:=space(25),ifonecli:=space(10),;
		ifaxcli:=space(10),icelcli:=space(10),inextel:=space(18),iemail:=space(40),iwebsite:=space(37)

telcli()
		
do while .t.

	setcolor("w/b,w+/b,,,w/b")
	@ 03,35 get irazcli picture "@!KX" valid !empty(irazcli)
	@ 04,16 get ifancli picture "@!KX" valid !empty(ifancli)
	@ 06,06 get icepcli picture "@R 99999-999"
	set cursor on
	read	
	set cursor off
	if lastkey() == 27
		return
	endif

   op=msgbox2("CONFIRMA INCLUSAO DO CLIENTE?" )
	if op = 1
//		if len(alltrim(icpfcnpj)) = 14
//			itippes="JURIDICA"
//		else
//			itippes="FISICA"
//		endif
		sqlexecute('insert into cadcli(razcli,fancli,cepcli) values ("'+irazcli+'","'+ifancli+'","'+icepcli+'")')
	endif
	exit
enddo
*************************************************************************************************
*************************************************************************************************
function atucadcli()
select 1
use
cSQL:= "select * from cadcli order by sql_rowid"
select 1
use sql (csql) alias cadcli
go top
*************************************************************************************************			
O erro ocorria quanto tentava utilizar a coluna sql_rowid.

Re: Comando delete com sqllib

Enviado: 21 Dez 2010 11:12
por Maligno
Envolver um campo numérico em aspas simples dá o mesmo efeito de não envolvê-lo. Funciona das duas formas. :)

Re: Comando delete com sqllib

Enviado: 23 Dez 2010 18:27
por gilsonpaulo
Amigos, com a ajuda do Mestre Vailtom resolvi o problema.:

Código: Selecionar todos

sqlexecute('delete * from cadcli where sql_rowid="'+STR(registro)+'"')
Obrigado a ajuda de todos.

Comando delete com sqllib

Enviado: 24 Jan 2011 23:48
por alaminojunior
Gilson, por acaso você está testando a versão DEMO 1.9h da SQLLIB PLUS ?
Caso sim, tería como me informar o link para download da mesma ? Já tentei direto com o Vailton e no site deles, mas não consigo.

Re: Comando delete com sqllib

Enviado: 26 Jan 2011 21:00
por gilsonpaulo

Re: Comando delete com sqllib

Enviado: 27 Jan 2011 12:55
por Toledo
O arquivo está corrompido!

O Vailton falou que vai colocar o link aqui no fórum.

Abraços,

Re: Comando delete com sqllib

Enviado: 27 Jan 2011 13:23
por vailton
Bom dia,
Links para download:

SQL LIB Maio/2009 - DEMO
Versão 1.9h - Para Harbour & xHarbour
Download da SQL LIB Plus! para Harbour ou xHarbour com suporte para MySQL apenas. Esta LIB é a DEMO da versão comercial da RDD.
Download:
http://www.sqllib.com.br/down/SQL-LIB-D ... ercial.zip - 3.36MB

SQL LIB Maio/2009 - FREE
Versão 1.9h - Para Harbour & xHarbour
Download da SQL LIB Free para Harbour ou xHarbour com suporte para MySQL apenas. Esta LIB é a versão gratuita da SQL LIB.
Download:
http://www.sqllib.com.br/down/SQL-LIB-v1.9h-FREE.zip - 3.39MB

Att,
Vailton Renato