4D v16.3

Introdução aos comandos SQL

Página Inicial

 
4D v16.3
SQL
Introdução aos comandos SQL

Introdução aos comandos SQL  


 

 

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).

A documentação SQL de 4D está composta de duas partes:

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 TipoSQL Tipo
C_STRINGSQL_C_CHAR
C_TEXTSQL_C_CHAR
C_REALSQL_C_DOUBLE
C_DATESQL_C_TYPE_DATE
C_TIMESQL_C_TYPE_TIME
C_BOOLEANSQL_C_BIT
C_INTEGERSQL_C_SHORT
C_LONGINTSQL_C_SLONG
C_BLOBSQL_C_BINARY
C_PICTURESQL_C_BINARY
C_GRAPHSQL_C_BINARY


Nota: os dados de tipo objeto (C_OBJECT) não são respaldados pelo motor SQL de 4D.

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 PARAMETER

1. 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:
     SQL EXECUTE("select * from t1 into :$myvar") // funciona em modo compilado

    O seguinte código irá falhar em modo compilado:
     C_TEXT(tRequest)
     tRequest:="select * from t1 into :$myvar"
     SQL EXECUTE(tRequest// erro 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).

É possível por diretamente o resultado de uma petição SQL em um list box de tipo array. Esta função oferece um meio rápido de visualizar o resultado de petições SQL. Só podem ser utilizadas as petições de tipo SELECT. Este mecanismo não pode ser utilizado com uma base SQL externa.

Isso funciona de acordo com os seguintes princípios:

  • Crie o list box que receberá os resultados da petição. A fonte de dados do lsit box deve ser Arrays.
  • Execute a petição SQL de tipo SELECT e atribua o resultado à variável associada ao list box. É possível utilizar as palavras chaves  Begin SQL/End SQL (ver o manual de Linguagem 4D).
  • Quando o conteúdo de um list box provém de uma petição SQL, as colunas não podem ser ordenadas ou modificadas pelo usuário.
  • Cada nova execução de uma petição SELECT com o list box a reiniciação das colunas (não é possível preencher o mesmo list box progressivamente utilizando várias petições SELECT).
  • Recomenda-se dar ao list box o mesmo número de colunas que as que terá no resultado de petição SQL. Se o número de colunas do list box é inferior ao necessário para a petição  SELECT, as colunas são adicionadas automaticamente. Se o número de colunas do list box é superior ao necessário para a petição SELECT,as colunas desnecessárias são ocultas.
Nota: As colunas adicionadas automaticamente estão relacionadas com as Variáveis Dinâmicas de tipo array. Esses arrays temporários permanecem enquanto o formulário existir. Uma variável temporária é criada do mesmo modo para cada título. Quando se chama o comando LISTBOX GET ARRAYS, o parâmetro arrVarCols contém ponteiros (apontadores) aos arrays temporários e o parâmetro arrVarTitulos contém os ponteiros às variáveis de títulos temporários. Se uma coluna adicionada é, por exemplo, a quinta coluna, seu nome é sql_column5 e seu título é sql_header5.
  • Em modo interpretado, os arrays existentes utilizados pelo list box podem ser redigitados automaticamente de acordo com os dados enviados pela petição SQL.
Exemplo
Queremos recuperar todos os campos da tabela PESSOAS e localizar seu conteúdo no list box cujo nome de variável é vlistbox. No método de objeto de um botão (por exemplo), é suficiente escrever:

 Begin SQL
    SELECT * FROM PEOPLE INTO <<vlistbox>>
 End SQL



Ver também 

EXPORT ODBC
IMPORT ODBC

 
PROPRIEDADES 

Produto: 4D
Tema: SQL

 
HISTÓRIA 

 
ARTICLE USAGE

Manual de linguagem 4D ( 4D v16)
Manual de linguagem 4D ( 4D v16.1)
Manual de linguagem 4D ( 4D v16.2)
Manual de linguagem 4D ( 4D v16.3)