6257 - INNER JOIN
Problema: Descrição do Problema: É possível utilizar INNER JOIN em Cursor?
Rotina / Tela: Nas Ferramentas do sistema.
Solução: Solução 6257: É necessário utilizar a função SQL_UsarSQLSenior2.
Veja abaixo um exemplo:
Funcao SQL_UsarSQLSenior2(Alfa Objeto, Numero usar)
Função que informa se o comando a ser definido para o cursor utiliza a sintaxe de linguagem Senior ou a sintaxe nativa (SQL Nativa: linguagem originada da base de dados utilizada, ex: Oracle, SQL server...etc).
Devem ser passados como parâmetro: o cursor(Alfa); um número que pode ser 0 (zero) para definir que não será utilizada sintaxe SQL Senior 2 ou um valor diferente de 0 (zero) para definir que será utilizada a sintaxe SQL Senior 2.
Por padrão os cursores utilizam SQL Senior 2, ou seja, caso a função não seja chamada, o cursor aceitará comandos com sintaxe SQL Senior 2. Cursores criados pela função SQL_Criar não respeitam a configuração definida na regra sobre utilizar ou não a sintaxe SQL Senior 2, respeitará apenas o que for definido através da função SQL_UsarSQLSenior2
Importante: Cursores que não usam SQL Senior 2 não podem utilizar abrangência, é importante que o uso da abrangência deve ser desabilitado explicitamente, utilizando a função SQL_UsarAbrangencia, como no exemplo abaixo:
@-- Exemplo de Funcao SQL_UsarSQLSenior2(Alfa Objeto, Numero usar) --@
Definir Alfa xCursor;
SQL_Criar(xCursor);
/* Passa como parâmetro o Cursor que deseja manipular e
depois o numero da abrangência de usuário que deseja fazer.
Deve sempre ser chamado antes de se passar o comando SQL.
*/
SQL_UsarSQLSenior2(xCursor,0); @define que o comando deverá utilizar a sintaxe nativa do banco de dados@
SQL_DefinirComando(xCursor,SELECT R034FUN.NOMFUN FROM R034FUN WHERE R034FUN.CODFIL = 9999 AND R034FUN.NUMEMP = 9999 AND TIPCOL = 9999 );
SQL_AbrirCursor(xCursor);
Enquanto (SQL_EOF(xCursor) = 0)
{
SQL_Proximo(xCursor);
}
SQL_FecharCursor(xCursor);
SQL_Destruir(xCursor);
Observações: Este método só poderá ser chamado antes de chamar a função SQL_DefinirComando.
Caso o cursor não use SQL Senior 2 e o uso da abrangência não for desabilitado, a mensagem Não é suportado o uso de abrangência de usuário com SQL nativo será mostrada no momento da definição do comando e a execução da regra será interrompida.
Exemplo de utilização de insert
Serve para adicionar informações nas tabelas da base de dados, conforme exemplo abaixo:
@-- Exemplo de Ultilização de Insert --@
Definir Alfa xCursor;
@-- Cria a variável que vai ser passada como parâmetro--@
Definir Alfa xBlob;
SQL_Criar(xCursor);
@-- Insere um novo registro na tabela de intervalos --@
SQL_DefinirComando(xCursor,INSERT INTO R006INT VALUES (9999,'Exemplo de intervalo'));
SQL_AbrirCursor(xCursor);
/*Todas as operações referentes a base de dados
serão feito entre abrirCursor e fecharCursor. */
SQL_FecharCursor(xCursor);
SQL_Destruir(xCursor);
Exemplo de utilização de Select
Serve para consultar informações de tabelas da base de dados, conforme exemplo abaixo:
@-- Define uma variável do tipo Alfa--@
Definir Alfa xCursor;
@-- Cria o cursor --@
SQL_Criar(xCursor);
@-- Define um comando para poder carregar as informações no Cursor --@
SQL_DefinirComando(xCursor,SELECT R034FUN.CODFIL FROM R034FUN WHERE R034FUN.CODFIL =1 AND R034FUN.NUMEMP = 1);
@-- Abri o cursor para Ultilização --@
SQL_AbrirCursor(xCursor);
/*Todas as operações referentes a base de dados
serão feito entre abrirCursor e fecharCursor. */
@-- Fecha o cursor depois de Ultilizar --@
SQL_FecharCursor(xCursor);
SQL_Destruir(xCursor);
Exemplo de utilização de update
Serve para alterar informações de tabelas da base de dados, conforme exemplo abaixo:
@-- Exemplo de Funcao SQL_DefinirBlob(Alfa Objeto, Alfa Campo, Numero Valor) --@
Definir Alfa xCursor;
@-- Cria a variável que vai ser passada como parâmetro--@
Definir Alfa xBlob;
SQL_Criar(xCursor);
@--Atualiza as informações na base de dados através do comando UPDATE --@
SQL_DefinirComando(xCursor,UPDATE R034FOT SET FOTEMP = :xBlob WHERE NUMEMP = 9999 AND NUMCAD = 9999 AND TIPCOL = 9999 );
@-- Abre o arquivo para a leitura(Indicado pelo 2º parâmetro)--@
xArquivo = Abrir(C:/TEste.jpg, Ler);
@-- Lê o arquivo que foi aberto acima, e o atribui a variável xBlob(Em binário) --@
Ler(xArquivo,xBlob,9999999);
/*
Passa como parâmetro o Cursor que deseja manipular e
o nome da variável que deseja carregar com algum valor,
e por útimo o valor que deseja carregar.
*/
SQL_DefinirBlob(xCursor,xBlob,xBlob);
SQL_AbrirCursor(xCursor);
/*Todas as operações referentes a base de dados
serão feito entre abrirCursor e fecharCursor. */
SQL_FecharCursor(xCursor);
SQL_Destruir(xCursor);
Observação: Se o comando não afetar registros, será exibida uma mensagem e a execução será cancelada.
Rotina / Tela: Nas Ferramentas do sistema.
Solução: Solução 6257: É necessário utilizar a função SQL_UsarSQLSenior2.
Veja abaixo um exemplo:
Funcao SQL_UsarSQLSenior2(Alfa Objeto, Numero usar)
Função que informa se o comando a ser definido para o cursor utiliza a sintaxe de linguagem Senior ou a sintaxe nativa (SQL Nativa: linguagem originada da base de dados utilizada, ex: Oracle, SQL server...etc).
Devem ser passados como parâmetro: o cursor(Alfa); um número que pode ser 0 (zero) para definir que não será utilizada sintaxe SQL Senior 2 ou um valor diferente de 0 (zero) para definir que será utilizada a sintaxe SQL Senior 2.
Por padrão os cursores utilizam SQL Senior 2, ou seja, caso a função não seja chamada, o cursor aceitará comandos com sintaxe SQL Senior 2. Cursores criados pela função SQL_Criar não respeitam a configuração definida na regra sobre utilizar ou não a sintaxe SQL Senior 2, respeitará apenas o que for definido através da função SQL_UsarSQLSenior2
Importante: Cursores que não usam SQL Senior 2 não podem utilizar abrangência, é importante que o uso da abrangência deve ser desabilitado explicitamente, utilizando a função SQL_UsarAbrangencia, como no exemplo abaixo:
@-- Exemplo de Funcao SQL_UsarSQLSenior2(Alfa Objeto, Numero usar) --@
Definir Alfa xCursor;
SQL_Criar(xCursor);
/* Passa como parâmetro o Cursor que deseja manipular e
depois o numero da abrangência de usuário que deseja fazer.
Deve sempre ser chamado antes de se passar o comando SQL.
*/
SQL_UsarSQLSenior2(xCursor,0); @define que o comando deverá utilizar a sintaxe nativa do banco de dados@
SQL_DefinirComando(xCursor,SELECT R034FUN.NOMFUN FROM R034FUN WHERE R034FUN.CODFIL = 9999 AND R034FUN.NUMEMP = 9999 AND TIPCOL = 9999 );
SQL_AbrirCursor(xCursor);
Enquanto (SQL_EOF(xCursor) = 0)
{
SQL_Proximo(xCursor);
}
SQL_FecharCursor(xCursor);
SQL_Destruir(xCursor);
Observações: Este método só poderá ser chamado antes de chamar a função SQL_DefinirComando.
Caso o cursor não use SQL Senior 2 e o uso da abrangência não for desabilitado, a mensagem Não é suportado o uso de abrangência de usuário com SQL nativo será mostrada no momento da definição do comando e a execução da regra será interrompida.
Exemplo de utilização de insert
Serve para adicionar informações nas tabelas da base de dados, conforme exemplo abaixo:
@-- Exemplo de Ultilização de Insert --@
Definir Alfa xCursor;
@-- Cria a variável que vai ser passada como parâmetro--@
Definir Alfa xBlob;
SQL_Criar(xCursor);
@-- Insere um novo registro na tabela de intervalos --@
SQL_DefinirComando(xCursor,INSERT INTO R006INT VALUES (9999,'Exemplo de intervalo'));
SQL_AbrirCursor(xCursor);
/*Todas as operações referentes a base de dados
serão feito entre abrirCursor e fecharCursor. */
SQL_FecharCursor(xCursor);
SQL_Destruir(xCursor);
Exemplo de utilização de Select
Serve para consultar informações de tabelas da base de dados, conforme exemplo abaixo:
@-- Define uma variável do tipo Alfa--@
Definir Alfa xCursor;
@-- Cria o cursor --@
SQL_Criar(xCursor);
@-- Define um comando para poder carregar as informações no Cursor --@
SQL_DefinirComando(xCursor,SELECT R034FUN.CODFIL FROM R034FUN WHERE R034FUN.CODFIL =1 AND R034FUN.NUMEMP = 1);
@-- Abri o cursor para Ultilização --@
SQL_AbrirCursor(xCursor);
/*Todas as operações referentes a base de dados
serão feito entre abrirCursor e fecharCursor. */
@-- Fecha o cursor depois de Ultilizar --@
SQL_FecharCursor(xCursor);
SQL_Destruir(xCursor);
Exemplo de utilização de update
Serve para alterar informações de tabelas da base de dados, conforme exemplo abaixo:
@-- Exemplo de Funcao SQL_DefinirBlob(Alfa Objeto, Alfa Campo, Numero Valor) --@
Definir Alfa xCursor;
@-- Cria a variável que vai ser passada como parâmetro--@
Definir Alfa xBlob;
SQL_Criar(xCursor);
@--Atualiza as informações na base de dados através do comando UPDATE --@
SQL_DefinirComando(xCursor,UPDATE R034FOT SET FOTEMP = :xBlob WHERE NUMEMP = 9999 AND NUMCAD = 9999 AND TIPCOL = 9999 );
@-- Abre o arquivo para a leitura(Indicado pelo 2º parâmetro)--@
xArquivo = Abrir(C:/TEste.jpg, Ler);
@-- Lê o arquivo que foi aberto acima, e o atribui a variável xBlob(Em binário) --@
Ler(xArquivo,xBlob,9999999);
/*
Passa como parâmetro o Cursor que deseja manipular e
o nome da variável que deseja carregar com algum valor,
e por útimo o valor que deseja carregar.
*/
SQL_DefinirBlob(xCursor,xBlob,xBlob);
SQL_AbrirCursor(xCursor);
/*Todas as operações referentes a base de dados
serão feito entre abrirCursor e fecharCursor. */
SQL_FecharCursor(xCursor);
SQL_Destruir(xCursor);
Observação: Se o comando não afetar registros, será exibida uma mensagem e a execução será cancelada.