Integração - Tabela com '-' no nome .

Boa Tarde,
Alguém já passou por isto ? Estou desenvolvendo uma integração com outro sistema em Delphi e Banco de Dados Firebird onde as tabelas tem ‘-’ nos nomes tipo G-ALUNOS / G-USUARIOS.
Ao fazer uma chamada de select com o sc_lookup me dá esta mensagem de ERRO:

(pdo-sqlite): SELECT NOME,MASTER FROM G-USUARIOS WHERE SENHA = ‘senha’
HY000: near “-”: syntax error

  ADOConnection._Execute(SELECT NOME,MASTER FROM G-USUARIOS WHERE SENHA = 'senha', false) % line 1085, file: adodb.inc.php

ADOConnection.Execute(SELECT NOME,MASTER FROM G-USUARIOS WHERE SENHA = ‘senha’) % line 1730, file: login_codek_apl.php
login_codek_apl.Valida_campos(null, null, null) % line 1117, file: login_codek_apl.php
login_codek_apl.controle() % line 1556, file: index.php

    Já tentei vários artifícios e não obtive resultados, sem contar que minha conexão de Banco de Dados é Firebird e ele aparece como (pdo-sqlite).
    Nos acessos nativos do Scriptcase, ou seja consultas e formulários não tem nenhum problema funcionam certo.
    Aguardo AJUDA.

    Obrigada,
Ana Brock

tem que usar delimitador quando for assim:

SELECT NOME,MASTER FROM G-USUARIOS WHERE SENHA = ‘senha’

Sr.Haroldo,

  Eu já tentei desta maneira tb, olhe o que acontece.

(pdo-sqlite): SELECT NOME,MASTER FROM ‘G-USUARIOS’ WHERE SENHA = ‘senha’
HY000: no such table: G-USUARIOS

  ADOConnection._Execute(SELECT NOME,MASTER FROM 'G-USUARIOS' WHERE SENHA = 'senha', false) % line 1085, file: adodb.inc.php

ADOConnection.Execute(SELECT NOME,MASTER FROM ‘G-USUARIOS’ WHERE SENHA = ‘senha’) % line 1730, file: login_codek_apl.php
login_codek_apl.Valida_campos(null, null, null) % line 1117, file: login_codek_apl.php
login_codek_apl.controle() % line 1556, file: index.php

Veja: Apóstrofe ou aspas simples é diferente de crase. ’ <> `

Veja a instrução com crase e com aspas simples no Workbench:

com aspas simples o nome da tabela esta sublinhado de vermelho, indica erro, pois aspas simples são delimitadores de constantes.

(pdo-sqlite): SELECT NOME,MASTER FROM G-USUARIOS WHERE SENHA = ‘senha’
HY000: no such table: G-USUARIOS

  ADOConnection._Execute(SELECT NOME,MASTER FROM `G-USUARIOS` WHERE SENHA = 'senha', false) % line 1085, file: adodb.inc.php

ADOConnection.Execute(SELECT NOME,MASTER FROM G-USUARIOS WHERE SENHA = ‘senha’) % line 1730, file: login_codek_apl.php
login_codek_apl.Valida_campos(null, null, null) % line 1117, file: login_codek_apl.php
login_codek_apl.controle() % line 1556, file: index.php

(pdo-sqlite): SELECT NOME,MASTER FROM ´G-USUARIOS´ WHERE SENHA = ‘senha’
HY000: near “-”: syntax error

  ADOConnection._Execute(SELECT NOME,MASTER FROM ´G-USUARIOS´ WHERE SENHA = 'senha', false) % line 1085, file: adodb.inc.php

ADOConnection.Execute(SELECT NOME,MASTER FROM ´G-USUARIOS´ WHERE SENHA = ‘senha’) % line 1730, file: login_codek_apl.php
login_codek_apl.Valida_campos(null, null, null) % line 1117, file: login_codek_apl.php
login_codek_apl.controle() % line 1556, file: index.php

Sr. Haroldo,

  Saberias me dizer o porque de estar dando a msg como se meu banco fosse (pdo-sqlite), sendo que ele esta criado e conectado como Firebird ?
  Será que este não é um dos motivos de não dar certo o nome da tabela ?

  Obrigada,
Ana Brock

Representante Scriptcase do RS
(51) 8452-8740
skype: brockinf

 Versão do SC 8.1.006
 Nem tabelas com underline esta funcionando.

(pdo-sqlite): SELECT NOME,EMAIL FROM G_FUNCIONARIOS WHERE upper(SENHA_ACESSO) = ‘22’
HY000: no such table: G_FUNCIONARIOS

  ADOConnection._Execute(SELECT NOME,EMAIL FROM `G_FUNCIONARIOS` WHERE upper(SENHA_ACESSO) = '22', false) % line 1085, file: adodb.inc.php

ADOConnection.Execute(SELECT NOME,EMAIL FROM G_FUNCIONARIOS WHERE upper(SENHA_ACESSO) = ‘22’) % line 1731, file: login_codek_apl.php
login_codek_apl.Valida_campos(null, null, null) % line 1119, file: login_codek_apl.php
login_codek_apl.controle() % line 1556, file: index.php

Atualmente tenho uma integração com um sistema bem antigo no mesmo cenário que o seu, vários problemas consegui resolver da seguinte forma criando o script dentro do Banco de Dados >> SQL Builder, e também testando diretamente ao invés do Workbench, pois algumas coisas não funcionaram de maneira igual nos dois ambientes.

Atualmente tenho uma integração com um sistema bem antigo no mesmo cenário que o seu, vários problemas consegui resolver da seguinte forma criando o script dentro do Banco de Dados >> SQL Builder, e também testando diretamente ao invés do Workbench, pois algumas coisas não funcionaram de maneira igual nos dois ambientes.
Boa Tarde, "script dentro do banco" se referes a procedures ?? ou algo parecido ??

Obrigada,
Ana Brock

Seria criar o lookup por lá.

Citação de: Ana Brock em Hoje às04:06:11 pm
Citar

    Atualmente tenho uma integração com um sistema bem antigo no mesmo cenário que o seu, vários problemas consegui resolver da seguinte forma criando o script dentro do Banco de Dados >> SQL Builder, e também testando diretamente ao invés do Workbench, pois algumas coisas não funcionaram de maneira igual nos dois ambientes.


    Boa Tarde, "script dentro do banco" se referes a procedures ?? ou algo parecido ??

    Obrigada,
    Ana Brock

Seria criar o lookup por lá.

 Desculpe, mas não gostei da alternativa uma vez que nativamente as tabelas são acessadas normalmente, encaminhei um BUG para a Scriptcase.

 OBRIGADA,

Ana Brock

Cópia seu código aqui, onde usa a instrução SQL.

[code] $spswd = sc_sql_injection({pswd});
$login = sc_sql_injection({pswd});

sc_alert([param_modulo]);

if( [param_modulo] == 'admin' or [param_modulo] == 'treina' )
{ 
	$sql = "SELECT NOME,MASTER FROM `G-USUARIOS` WHERE SENHA = ".$spswd;
}
elseif( [param_modulo] == 'professor' )
{ 
	$sql = "SELECT NOME,EMAIL FROM G_FUNCIONARIOS WHERE SENHA_ACESSO = ".$spswd;
}
elseif( [param_modulo] == 'aluno' )
{ 
	$sql = "SELECT NOME,EMAIL,SITUACAO FROM G-ALUNOS WHERE SENHA_ACESSO = ".$spswd;
}

sc_lookup(rs, $sql, "CODEK_FITNES");

if(count({rs}) == 0)
{
	sc_log_add('Falha no Login', {lang_login_fail} . {pswd});
	sc_logged_in_fail({pswd});
	sc_error_message({lang_error_login});
}

[/code]

Fiz um teste com mariadb e foi tudo bem.

Sr.Haroldo,

   O ambiente para testes tem que ser um banco Firebird ('CODEK_FITNES) e um banco Postgresql, o formulário é da conexão postgresql pois é esta conexão a principal.
   O scriptcase colocou como sqlite ERRADAMENTE.


    Obrigada,

Ana Brock

Ë Ana, não posso dizer que seja um bug do SC, pois não tenho como testar para firebird, com postgree funciona.

Boa Tarde Sr.Haroldo

  Fiz mais alguns testes:
  1 - No ambiente IDEAL que é banco de dados Principal POSTGRESQL e banco de integração FIREBIRD onde NÃO tenho acesso para mudar nomenclaturas de tabelas, quando executo o sc_lookup( dados, $sql, "FIREBIRD") o Scriptcase SEMPRE interpreta como se o banco seja (pdo-sqlite) conforme a mensagem abaixo.
     (pdo-sqlite): SELECT NOME,MASTER FROM GUSUARIOS WHERE SENHA = 'senha'   
     HY000: no such table: GUSUARIOS
   *** Notem que alterei o nome da tabela para este teste.

  2 - Em um ambiente de teste onde para este formulário setei como banco de dados Principal o FIREBIRD ( que é o de integração ) e setei o banco POSTGRESQL onde tenho as tabelas nativas do scriptcase para controle de acesso de segurança o Select ( "SELECT NOME,MASTER FROM GUSUARIOS WHERE SENHA = 'senha' " ) funciona PERFEITAMENTE.

 Portanto REFORÇO que é um BUG pois a macro sc_lookup(Dataset, "Comando SQL", "Conexão") quando se usa o parâmetro "Conexão" não esta identificando qual o modelo do Banco de Dados.

 No aguardo de uma resposta e pronta SOLUÇÃO para o bem da comunidade Scriptcase.
 P.S.: Já foi reportado a Scriptcase.

     Obrigada,

 Ana Brock

Representante Scriptcase no RS
(51) 8452-8740
skype: brockinf

Cola as telas da conexões que VC usa.

Esse erro está acontecendo porque a conexão é sqlite, onde deve-se usar o " ao invés de `
seu código alterado:

	$spswd = sc_sql_injection({pswd});
	$login = sc_sql_injection({pswd});
	
	sc_alert([param_modulo]);

	if( [param_modulo] == 'admin' or [param_modulo] == 'treina' )
	{ 
		$sql = 'SELECT NOME,MASTER FROM "G-USUARIOS" WHERE SENHA = '.$spswd;
	}
	elseif( [param_modulo] == 'professor' )
	{ 
		$sql = 'SELECT NOME,EMAIL FROM G_FUNCIONARIOS WHERE SENHA_ACESSO = '.$spswd;
	}
	elseif( [param_modulo] == 'aluno' )
	{ 
		$sql = 'SELECT NOME,EMAIL,SITUACAO FROM G-ALUNOS WHERE SENHA_ACESSO = '.$spswd;
	}
	
	sc_lookup(rs, $sql, "CODEK_FITNES");

	if(count({rs}) == 0)
	{
		sc_log_add('Falha no Login', {lang_login_fail} . {pswd});
		sc_logged_in_fail({pswd});
		sc_error_message({lang_error_login});
	}