sc_connection_new, scriptcase9 e sqlite [Resolvido]

Boa noite,

A database usada é do samples (sqlite) do próprio Scriptcase.
E foi usada uma blank para testes.

No Scriptcase 8 coloco este código blank:

$arr_conn = array();

$arr_conn[‘drive’] = “sqlite3”;
$arr_conn[‘server’] = “”;
$arr_conn[‘user’] = “”;
$arr_conn[‘password’] = “”;
$arr_conn[‘database’] = “/XXXXXXXXXXXXXXXXXXX/devel/conf/scriptcase/samples.db”;
$arr_conn[‘persistent’] = “Y”;
$arr_conn[‘encoding’] = “utf8”;

sc_connection_new(“sqlitenew”, $arr_conn);
$check_sql = “select customerid, companyname, creditlimit, phone from customers”;
sc_lookup(rs, $check_sql,“sqlitenew”);
if (isset({rs[0][0]})) // Row found
{
echo {rs[0][0]}."
";
echo {rs[0][1]}."
";
echo {rs[0][2]}."
";
echo {rs[0][3]}."
";

}

É listado:

ALFKI
Alfreds Futterkiste
3367.41
30074321

No Scriptcase 9 coloco numa blank o mesmo código e nada é listado.
Se ligo o debug na blank aparece:

(firebird): SELECT RDB$GET_CONTEXT(‘SYSTEM’,‘ENGINE_VERSION’) AS “Version” FROM RDB$DATABASE
(mysqli): select customerid, companyname, creditlimit, phone from customers
Query: select customerid, companyname, creditlimit, phone from customers failed. Table ‘xxxxxxxxxx.customers’ doesn’t exist
1146: Table ‘xxxxxxxxxx.customers’ doesn’t exist
ADOConnection._Execute(select customerid, companyname, creditlimit, phone from customers, false) % line 1149, file: adodb.inc.php
ADOConnection.Execute(select customerid, companyname, creditlimit, phone from customers) % line 1517, file: index.php
blank_apl.controle() % line 1866, file: index.php

O scriptcase 9 está usando o driver do mysql ao invés do sqlite especificado.

Observação:
No diagnosis do Scriptcase 8 e Scriptcase 9 constam tanto o sqlite3 quanto o pdo_sqlite habilitado.

PS: Junte-se ao nosso grupo de Scriptcase no Telegram: https://t.me/scriptcasebr
Quanto mais usuários para trocar experiências melhor.

http://www.scriptcase.com.br/aprendizagem/documentacao/pt_br/v9/manual/14-macros/01-visao-geral/#sc_connection_new


Veja abaixo a lista de drivers das conexões:

“sqlite”

Ronyan,
Repito os drivers sqlite estão ativos nas duas versões do Scriptcase.
No Scriptcase 8 funciona e no Scriptcase 9 não.
Tentei com sqlite, pdosqlite e sqlite3.

[size=12pt]Com os três driver somente funciona no Scriptcase 8.[/size]

O Sqlite 3 tirei dos fontes gerados pelo scriptcase como pode ver abaixo e funciona no Scriptcase 8.

[size=12pt]PS: Eu acho que este bug foi introduzido na ScriptCase v9.0.021
Quando: Corrigido problema ao utilizar o pârametro de conexão, sendo criado dinamicamente através da macro sc_connection_new.[/size]

Alguma novidade?

Ronyan,
Bom dia,
Alguma novidade?

Ronyan,
Boa noite,
Alguma novidade?

Foi passado pro departamento de bugs.
Qualquer novidade, te aviso aqui.

Obrigado pelo retorno.

Ronyan, Alguma novidade?

Eu estava vendo no Scriptcase 9.1.005 dentro da pasta prod/third/adodb/adodb.inc.php.

A versão do adodb é 4.991

No site do adodb fala sobre a compatibilidade com o php 7 -> http://adodb.org/dokuwiki/doku.php?id=v5:php7_status

[i]"PHP 7

We are working to ensure full support for PHP 7 in both the current ADOdb production (5.20.x) , and development (5.21.x) releases. There are no plans to implement PHP 7 support in ADOdb version 5.19.
Addressing Issues

Any PHP 7 compatibility issues found are released as Hot-fixes to the current production release, so it is important that you use the most recent version. Hot-fix releases are drop-in replacements to earlier versions of the same release number. You can check the current status of PHP 7 issues on the Github Issues Tracker.
Upgrading From Earlier Releases

Users have reported that upgrading from releases 5.00 (released in 2007) and higher have been reasonably easy, but that earlier versions may require substantial adjustments, due to design considerations in ADOdb version 4. If you need guidance, use any of the support methods listed on the main page.
Moving From Custom Releases

In order to migrate their products from custom older versions of ADOdb back to the core product and take advantage of the active development of the product, as well as PHP 7 compatibility, a number of users have submitted their custom functionality to be integrated into core. If you are in the same situation, contact us about having your feature added.

Tradução:

PHP 7

Estamos trabalhando para garantir suporte completo para o PHP 7 nas versões atuais do ADOdb (5.20.x) e de desenvolvimento (5.21.x). Não há planos para implementar o suporte ao PHP 7 no ADOdb versão 5.19.
Problemas de endereçamento

Quaisquer problemas de compatibilidade encontrados no PHP 7 são lançados como Hot-fixes na versão de produção atual, por isso é importante que você use a versão mais recente. As liberações do Hot-fix são substituições diretas para versões anteriores do mesmo número de release. Você pode verificar o status atual dos problemas do PHP 7 no Rastreador de problemas do Github.
Atualizando de versões anteriores

Os usuários relataram que a atualização de versões 5.00 (lançadas em 2007) e superiores foi razoavelmente fácil, mas que versões anteriores podem exigir ajustes substanciais, devido a considerações de design no ADOdb versão 4. Se você precisar de orientação, use qualquer um dos métodos de suporte listados na página principal.
Movendo-se de lançamentos personalizados

Para migrar seus produtos de versões antigas personalizadas do ADOdb de volta para o produto principal e aproveitar o desenvolvimento ativo do produto, bem como a compatibilidade com o PHP 7, vários usuários enviaram suas funcionalidades personalizadas para serem integradas ao núcleo. Se você estiver na mesma situação, entre em contato conosco para adicionar seu recurso."[/i]

Todo este erro com o sc_connection_new não é por causa desta compatibilidade do php 7 com a versão que o Scriptcase usa (4.991)?

Visto que no código gerado temos:

if (in_array(strtolower($this->nm_con_sqlitenew[‘tpbanco’]), $this->nm_bases_sybase))
{
$this->nm_db_sqlitenew->fetchMode = ADODB_FETCH_BOTH;
$this->nm_db_sqlitenew->Execute(“set dateformat ymd”);
$this->nm_db_sqlitenew->Execute(“set quoted_identifier ON”);
}
$this->nm_db_sqlitenew->debug = true;

Pois no Scriptcase 8 que trabalha com php 5.6 vai normal é a versão do adodb nele é 4.991.
E o adodb 4.991 é próprio para o php 5.6
No changelog do adodb somente encontro referência ao php 7 no adodb 5.x em diante.

Ou o Scriptcase usa uma versão modificada do adodb?

Utiliza uma versão modificada da adodb.

Ok. Obrigado pela resposta Ronyam.
Eu pensei que fosse somente com o SQlite.
Mas o erro persiste.
Tentei com outro banco (SGDB).
No caso o Firebird:
(firebird): SELECT RDB$GET_CONTEXT(‘SYSTEM’,‘ENGINE_VERSION’) AS “Version” FROM RDB$DATABASE (mysqli): select customer, PHONE_NO, ADDRESS_LINE1, ADDRESS_LINE2 from CUSTOMER Query: select customer, PHONE_NO, ADDRESS_LINE1, ADDRESS_LINE2 from CUSTOMER failed. Table ‘c1scriptcase9.CUSTOMER’ doesn’t exist
1146: Table ‘c1scriptcase9.CUSTOMER’ doesn’t exist

ADOConnection._Execute(select customer, PHONE_NO, ADDRESS_LINE1, ADDRESS_LINE2 from CUSTOMER, false) % line 1149, file: adodb.inc.php
ADOConnection.Execute(select customer, PHONE_NO, ADDRESS_LINE1, ADDRESS_LINE2 from CUSTOMER) % line 1546, file: index.php
blank_apl.controle() % line 1893, file: index.php

O engraçado é que ele tenta acessar na nova conexão o banco do Scriptcase.
Ou seja o banco interno do Scriptcase onde tem os projetos.
E não o banco que discriminamos para nova conexão.

$arr_conn = array();

$arr_conn[‘drive’] = “firebird”;
$arr_conn[‘server’] = “localhost”;
$arr_conn[‘user’] = “XXXXXXXXXXX”;
$arr_conn[‘password’] = “XXXXXXXXXXXXX”;
$arr_conn[‘database’] = “/XXXXXXXXXXXXXXXXXXXXXXX/employee.fdb”;
$arr_conn[‘persistent’] = “N”;
$arr_conn[‘encoding’] = “none”;

sc_connection_new(“firebirdnew”, $arr_conn);

$check_sql = “select CUSTOMER PHONE_NO, ADDRESS_LINE1, ADDRESS_LINE2 from CUSTOMER”;
sc_lookup(rs, $check_sql,“firebirdnew”);
if (isset({rs[0][0]})) // Row found
{
echo {rs[0][0]}."
";
echo {rs[0][1]}."
";
echo {rs[0][2]}."
";
echo {rs[0][3]}."
";
}

Resolvido através de contato pelo bugs@netmake.com.br e feedback@netmake.com.br

Olá Pessoal,

É resolvido colocando o caminho até o .db do sqlite em “server” e deixando o “database” vazio.

Exemplo:
$arr_conn = array();
$arr_conn[“drive”] = “pdosqlite”;
$arr_conn[“server”] = “/var/www/html/scriptcase/devel/conf/scriptcase/samples.db”;
$arr_conn[“user”] = “”;
$arr_conn[“password”] = “”;
$arr_conn[“database”] = “”;
$arr_conn[“persistent”] = “Y”;
$arr_conn[“encoding”] = “utf8”;
sc_connection_new(“sqlitenew”, $arr_conn);


Victor Souza
Suporte Scriptcase

Obrigado pelo retorno