Cuidado com o SQLMIX
Enviado: 01 Ago 2020 10:44
Tenham cuidado quando forem usar o SQLMIX com campos que podem variar de tamanho, ou mesmo terem o valor NIL.
O exemplo abaixo funciona perfeitamente... Isso porque todos os campos estão preenchidos.
Se eu substituir o
REPLACE NAME WITH "USER 01"
Por
REPLACE NAME WITH ""
A primeira coluna vai sumir
Isso acontece porque nos DBFs tradicionais os campos sempre tem o mesmo tamanho.
Um campo CHARACTER(30) se estiver vazio vai ter tamanho 30.
Mas o SQLMIX não trata o tamanho dos campos conforme definido em dbCreate().
Se você não gravar os espaços o tamanho do campo vai variar e o TBrowser tradicional (criado
para manipular DBFs) vai se atrapalhar.
Eu tive a oportunidade de usar o SQLMIX com RDD para postgres (sddpgsql) e tinha sempre que gravar
espaços porque dava erro ao recuperar campos NULL. Eu não tinha atentado para a causa desse problema.
Não sei se esse problema persiste quando ele acessa banco de dados porque só uso SQLMIX para trabalhar
com arrays. Minhas funções de banco de dados eu criei a parte e utilizo o SQLMIX para receber os valores.
Ainda acho que vale a pena usar o RDD por causa da facilidade com que as consultas são feitas, podemos
usar o que aprendemos com os DBFs e realmente fazer a diferença.
Mas só temos que ter cuidado com essas surpresas.
O exemplo abaixo funciona perfeitamente... Isso porque todos os campos estão preenchidos.
Código: Selecionar todos
#require "rddsql"
REQUEST SQLMIX
PROCEDURE Main()
CLS
rddSetDefault( "SQLMIX" )
dbCreate( "persons", { { "NAME", "C", 20, 0 }, { "FAMILYNAME", "C", 20, 0 }, { "BIRTH", "D", 8, 0 }, { "AMOUNT", "N", 9, 2 } }, , .T., "persons" )
APPEND BLANK
REPLACE NAME WITH "USER 01"
REPLACE FAMILYNAME WITH "FAMILLY 01"
REPLACE BIRTH WITH DATE()
REPLACE AMOUNT WITH 1000
APPEND BLANK
REPLACE NAME WITH "USER 02"
REPLACE FAMILYNAME WITH "FAMILLY 02"
REPLACE BIRTH WITH DATE()
REPLACE AMOUNT WITH 1200
APPEND BLANK
REPLACE NAME WITH ""
REPLACE FAMILYNAME WITH "FAMILLY 03"
REPLACE BIRTH WITH DATE()
REPLACE AMOUNT WITH 1200
dbGoTop()
Browse()
RETURN
REPLACE NAME WITH "USER 01"
Por
REPLACE NAME WITH ""
A primeira coluna vai sumir
Isso acontece porque nos DBFs tradicionais os campos sempre tem o mesmo tamanho.
Um campo CHARACTER(30) se estiver vazio vai ter tamanho 30.
Mas o SQLMIX não trata o tamanho dos campos conforme definido em dbCreate().
Se você não gravar os espaços o tamanho do campo vai variar e o TBrowser tradicional (criado
para manipular DBFs) vai se atrapalhar.
Eu tive a oportunidade de usar o SQLMIX com RDD para postgres (sddpgsql) e tinha sempre que gravar
espaços porque dava erro ao recuperar campos NULL. Eu não tinha atentado para a causa desse problema.
Não sei se esse problema persiste quando ele acessa banco de dados porque só uso SQLMIX para trabalhar
com arrays. Minhas funções de banco de dados eu criei a parte e utilizo o SQLMIX para receber os valores.
Ainda acho que vale a pena usar o RDD por causa da facilidade com que as consultas são feitas, podemos
usar o que aprendemos com os DBFs e realmente fazer a diferença.
Mas só temos que ter cuidado com essas surpresas.