4D inclui um motor SQL integrado. O programa também inclui um servidor SQL que pode ser consultado por outras aplicações 4D ou de terceiras partes (através do piloto OBDC de 4D).
Os diferentes modos de acessar ao motor SQL de 4D, a configuração do servidor SQL assim como os comandos e palavras chaves que podem ser utilizadas nas pesquisas SQL são detalhadas em um manual independente, o manual 4D SQL.
O tema "SQL" agrupa vários comandos 4D relacionados com o uso de SQL em 4D:
* Controle do servidor SQL: START SQL SERVER e STOP SQL SERVER
* Acesso direto ao motor SQL integrado: SET FIELD VALUE NULL, Is field value Null, QUERY BY SQL.
* Gestão das conexões a fontes de dados externas ou internas (SQL pass-through): GET DATA SOURCE LIST, Get current data source, SQL LOGIN, SQL LOGOUT.
* Comandos de alto nível para manipulação de dados no marco de conexões SQL diretas ou através ODBC: Begin SQL, End SQL, SQL CANCEL LOAD, SQL LOAD RECORD, SQL EXECUTE, SQL End selection, SQL SET OPTION, SQL SET PARAMETER, SQL GET LAST ERROR, SQL GET OPTION.
Os comandos SQL integrados de 4D começam com o prefixo "SQL" e implementam os seguintes princípios:
- A menos que seja indicado o contrário, pode utilizar estes comandos com o motor SQL interno 4D ou em uma conexão externa que é aberta diretamente ou através ODBC. O comando SQL LOGIN permite definir o tipo de conexão a abrir.
- O alcance de uma conexão é o processo. Se deseja administrar simultaneamente várias conexões, deve iniciar um processo por SQL LOGIN.
- Pode interceptar os erros ODBC gerados durante a execução de uno dos comandos SQL de alto nível utilizando o comando ON ERR CALL. O comando SQL GET LAST ERROR pode ser utilizado neste caso para obter informação adicional.
O padrão ODBC (Open DataBanco Connectivity) define uma biblioteca de funções padronizadas. Estas funções permitem a uma aplicação como 4D acessar através da linguagem SQL a todos os Sistemas de gestão de dados compatíveis com ODBC (bancos de dados, folhas de cálculo, outras aplicações 4D, etc.).
Nota: 4D também permite importar e exportar dados em uma fonte ODBC através dos comandos IMPORT ODBC e EXPORT ODBC ou manualmente em modo Desenho. Para maior informação, consulte o Manual de Desenho 4D.
Nota: os comandos SQL de alto nível de 4D permitem implementar solucões simples para a comunicação entre as aplicações 4D e as fontes de dados ODBC. Se seus aplicações necessitam um apoio mais extenso do padrão ODBC, necessitará o plug-in ODBC “baixo nível” de 4D, 4D ODBC Pro.
A tabela a seguir lista as correspondências estabelecidas automaticamente por 4D entre os tipos de dados 4D e SQL:
4D Tipo | SQL Tipo |
C_STRING | SQL_C_CHAR |
C_TEXT | SQL_C_CHAR |
C_REAL | SQL_C_DOUBLE |
C_DATE | SQL_C_TYPE_DATE |
C_TIME | SQL_C_TYPE_TIME |
C_BOOLEAN | SQL_C_BIT |
C_INTEGER | SQL_C_SHORT |
C_LONGINT | SQL_C_SLONG |
C_BLOB | SQL_C_BINARY |
C_PICTURE | SQL_C_BINARY |
C_GRAPH | SQL_C_BINARY |
4D oferece duas maneiras de inserir expressões 4D (variáveis, arrays, campos, expressões válidas) nas solicitações SQL: a associação direta e a definição de parâmetros utilizando SQL SET PARAMETER.
A associação direta pode ser realizada de duas formas:
* Inserindo o nome do objeto 4D entre os caracteres << e >> no texto da solicitação.
* Antecedendo a referência com dois pontos":".
SQL EXECUTE("INSERT INTO emp (empnum,enome) VALUES (<<vempnum>>,<<vemome>>)")
&NBSP;SQL EXECUTE("SELECT idade FROM Pessoa WHERE nome= :vNome")</vemome></vempnum>
Nota: em modo compilado, não pode utilizar referências a variáveis locais (que começam por $).
Nesses exemplos, os valores atuais das variáveis 4D vEmpnum, vEnome e Vnome substituirão os parâmetros quando o pedido seja executado. Esta solução também funciona com campos e arrays 4D.
Esta sintaxe de fácil utilização, apresenta o inconveniente de não cumprir o padrão SQL e de não permitir a utilização de parâmetros de saída. Para remediar isto, pode utilizar o comando
SQL SET PARAMETER. Este comando permite definir cada objeto 4D a ser integrado em uma solicitação assim como também seu modo de utilização (entrada, saída ou ambos). A Sintaxe produzida é padrão. Para maior informação, consulte a descrição do comando
SQL SET PARAMETER1. Este exemplo executa uma pesquisa SQL que utiliza diretamente os arrays 4D associados:
ARRAY TEXT(MeuArrayText;10)
ARRAY LONGINT(MeuArrayInteiroLongo;10)
For(vContador;1;Size of array(MeuArrayText))
MeuArrayText{vContador}:="Text"+String(vContador)
MeuArrayInteiroLongo{vContador}:=vContador
End for
SQL LOGIN("meusql";"root";"")
SQLStmt:="insert into app_testTable (campo_alfa, campo_inteirolongo) VALUES (<<miarraytext>>, <<miarrayinteirolongo>>)"
SQL EXECUTE(SQLStmt)</miarrayinteirolongo></miarraytext>
2. Este exemplo permite executar um pedido SQL utilizando diretamente os campos 4D associados:
ALL RECORDS([Tabela 2])
&NBSP;SQL LOGIN("mysql";"root";"")
&NBSP;SQLStmt:="insert into app_testTable (campo_alfa, campo_inteirolongo) VALUES (<<[Tabela 2]Campo1>"+">,<<[Tabela2]Campo2>>)"
&NBSP;SQL EXECUTE(SQLStmt)
3. Este exemplo permite executar uma pesquisa SQL passando diretamente uma variável através de um ponteiro Sem referência:
C_LONGINT($vLong)
C_POINTER($vPonteiro)
$vLong:=1$vPonteiro:=->$vLong
SQL LOGIN("meusql";"root";"")
SQLStmt:="SELECT Col1 FROM TEST WHERE Col1=:$vPonteiro"
SQL EXECUTE(SQLStmt)
Em modo compilado, pode utilizar referencias de variáveis locais (começando pelo caractere $) em instruções SQL sob certas condições:
- Pode utilizar variáveis locais dentro de uma sequência Begin SQL / End SQL, exceto com o comando EXECUTE IMMEDIATE;
- Pode utilizar variáveis locais com o comando SQL EXECUTE quando estas variáveis se utilizam diretamente no parâmetro de petição SQL e não via as referencias.
Por exemplo, o seguinte código funciona em modo compilado:
O seguinte código irá falhar em modo compilado:
A recuperação dos valores na linguagem 4D que resulta das consultas SQL é realizada de duas formas:
- Utilizando os parâmetros adicionais do comando SQL EXECUTE (solução recomendada).
- Utilizando a cláusula INTO dentro da própria pesquisa SQL (solução reservada para casos especiais).