terça-feira, 12 de janeiro de 2016

WX - Montando uma string de código Sql com absoluto controle e evitando erros que no debug acabam não sendo exibidos



http://forum.pcsoft.fr/fr-FR/pcsoft.br.windev/745-montando-uma-string-codigo-sql-com-absoluto-controle/read.awp







Prezados

Eu recomendo fazer de outra maneira, segue minha sugestão:

Sqlcodigo is string = [
UPDATE PUESTOS SET NOMBRE ='@Nombre@' , APELLIDO ='@Apellido@' , PUESTO ='@Puesto@' WHERE ID = @ID@
]

//note que aonde é string tem aspa simples e no id que é int não tem aspas simples e o @@ que eu uso é uma convenção de código minha para agora usar o réplica da linha acima não trocar textos que não devem ser substituídos assegurando a troca somente naquela posição.

Sqlcodigo = Replace (Sqlcodigo, "@Nombre@" , Edt_Nombre)
Sqlcodigo = Replace (Sqlcodigo, "@Apelido@" , Edt_Apelido)
Sqlcodigo = Replace (Sqlcodigo, "@Puesto@" , Edt_Puesto)
Sqlcodigo = Replace (Sqlcodigo, "@ID@" , Edt_ID)


//OBS.: Agora tá 100% certo o código no debug aqui nesse ponto a string está perfeitamente montada fácil localização e pode ser capturada na parte da plane Debug o sql se copiar e colar do debug no seu Manager Sql digamos do Mssql vai ter que funcionar. LEMBRO da questão do null se tiver que controlar use o Replace null que eu postei no forum oficial da PcSoft Bar.


SQLExec(Sqlcodigo, "QRY1")

//Da mais trabalho mas fica mais fácil de achar os erros... que são na maioria das vezes a falta de vírgula entre campos que faltou no exemplo do sr Carbalho e não por aspas simples quando é string ou não por quando for num podendo ser controlado isso com o Replacenull ou com um IF ou ainda com uma condição TERNÁRIA ou usar o StringBuilder.


Exemplo errado de fazer pois fica difícil de achar o erro até no debug
SQLExec("UPDATE PUESTOS SET NOMBRE ="+ EDT_Nombre +" APELLIDO ="+ EDT_Apellido +" PUESTO ="+ EDT_Puesto +" WHERE ID = "+ STC_ID,"QRY1")



Posté le 18 octobre 2015 - 03:23
Pode ser usado no SqlExec ou no HexecuteSqlQuery:

//Codigo SQL com replace de campos

//Array
LASTNAME is dynamic array
FIRSTNAME is dynamic array
EXTENSION is dynamic array

Sqlcodigo is string = [
UPDATE PUESTOS SET NOMBRE ='@Nombre@' , APELLIDO ='@Apellido@' , PUESTO ='@Puesto@' WHERE ID = @ID@
]

Sqlcodigo = Replace (Sqlcodigo, "@Nombre@" , Edt_Nombre)
Sqlcodigo = Replace (Sqlcodigo, "@Apelido@" , Edt_Apelido)
Sqlcodigo = Replace (Sqlcodigo, "@Puesto@" , Edt_Puesto)
Sqlcodigo = Replace (Sqlcodigo, "@ID@" , Edt_ID)

//Dai
//Exemplo 1

i is int = 0
SQLExec(Sqlcodigo, "QRY1")
WHILE SQLFetch("QRY1") = 0 // There is still another line to read
i++
// Retrieve the data
LASTNAME[i] = SQLGetCol("QRY1", 1)
FIRSTNAME[i] = SQLGetCol("QRY1", 2)
EXTENSION[i] = SQLGetCol("QRY1", 3)
END
SQLClose("QRY1")


//OU
//Exemplo 2

QrySql is Data Source
ok is boolean = SQLExec(QrySql , Conn, QueryDefault, Sqlcodigo)
IF ok = True
FOR EACH QrySql

LASTNAME[i] = QrySql.LASTNAME

FIRSTNAME[i] = QrySql.FIRSTNAME

EXTENSION[i] = QrySql.EXTENSION

END
END


Nenhum comentário:

Postar um comentário

Teste

Teste
teste