SC V6 + ODBC PROGRESS

Bom dia Colegas,

A questão de alguns meses assumimos um projeto em cima do DataSul.
Acreditávamos que o SC seria a melhor solução para o desenvolvimento rápido, mas infelizmente não é o que vem acontecendo.
Aqueles que conhecem o banco de dados PROGRESS, devem saber que o mesmo trabalha com travamento de tabelas e para que não ocorra esse travamento temos que adicionar a cláusula WITH (NOLOCK) nos selects, caso contrário DEAD LOCK na certa.

Mas o scriptcase não aceita a cláusula nas consultas, e não as coloca automáticamente nos selects dos formularios. Quanto aos formulários acabamos desenvolvendo através de aplicações de controles (tudo na unha) mas as consultas que tormento.

A razão do erro é porque a NM adiciona a palavra “asc” internamente ao select principal da consulta, essa palavra sempre é adicionada quando existe a cláusla ORDER BY.

ERRO
Erro ao acessar o banco de dados
[DataDirect][ODBC Progress OpenEdge Wire Protocol driver][OPENEDGE]Syntax error in SQL statement at or about “WITH (NOLOCK) asc” (10713)
SelectLimit(SELECT “descr-original” as sc_field_1, “part-number” as sc_field_0, “it-codigo” as sc_field_2 from PUB. “part-number” order by “descr-original” asc WITH (NOLOCK) asc, 17, 0)

Sugestão: Não usem o SC com PROGRES.

Carol talvez fosse o caso de vocês que tem tido experiências ruins no SC fizessem uma documentação mais detalhada e enviassem ao suporte da NM, PROGRESS acredito que não é o forte da ferramenta e situações como a que você descreve no post talvez tenham passado desapercebido.

Uma das coisas que nossa empresa abortou a muito tempo é o Suporte da NM.

E a ferramenta foi vendida ao cliente com a garantia que funcionava com PROGRES via ODBC.

E se notar no código, não justifica o gerador incluir a palavra “asc” de forma redundante.

Entramos no processo, porque outros profissionais não conseguiram progredir com a ferramenta nesse ambiente.

Deve ser devido ao PROGRESS não ser um banco muito conhecido divulgado, não quero dizer que ele não seja bom, tem até uma ferramenta RAD para desenvolver em linguagem 4G PROGRESS na própria ferramenta.

O seu cliente deve usar com certeza o EMS-DATASUL ERP, e deve estar querendo fazer uma integração com a WEB 2.0 através do SCRIPTCASE.

Mas que ‘FAIL’ o SC ficar mexendo na SQL, eheh

Carol,

Você poderia mostrar o SELECT realizado nesta aplicação que ocorreu o problema do ASC redundante?

att,
Bernhard Bernsmann

No post inicial esta o select.
Mas segue novamente:

odbc): select count(*) from PUB.item where “it-codigo” <> ‘’ and “it-codigo” <> ‘.’
(odbc): SELECT “desc-item” as sc_field_1, “it-codigo” as sc_field_0, un from PUB.item where “it-codigo” <> ‘’ and “it-codigo” <> ‘.’ order by “desc-item” asc, “it-codigo” desc WITH (NOLOCK) asc
S1000: [DataDirect][ODBC Progress OpenEdge Wire Protocol driver][OPENEDGE]Syntax error in SQL statement at or about “NOLOCK) asc” (10713)
ADOConnection._Execute(SELECT “desc-item” as sc_field_1, “it-codigo” as sc_field_0, un from PUB.item where “it-codigo” <> ‘’ and “it-codigo” <> ‘.’ …, false) % line 1085, file: adodb.inc.php
ADOConnection.Execute(SELECT “desc-item” as sc_field_1, “it-codigo” as sc_field_0, un from PUB.item where “it-codigo” <> ‘’ and “it-codigo” <> ‘.’ …, false) % line 1391, file: adodb.inc.php
ADOConnection.SelectLimit(SELECT “desc-item” as sc_field_1, “it-codigo” as sc_field_0, un from PUB.item where “it-codigo” <> ‘’ and “it-codigo” <> ‘.’ …, 17, 0) % line 537, file: ratweb_item_con_grid.class.php
ratweb_item_con_grid.inicializa() % line 86, file: ratweb_item_con_grid.class.php
ratweb_item_con_grid.monta_grid(0) % line 1366, file: ratweb_item_con.php
ERRO
Erro ao acessar o banco de dados
[DataDirect][ODBC Progress OpenEdge Wire Protocol driver][OPENEDGE]Syntax error in SQL statement at or about “NOLOCK) asc” (10713)
SelectLimit(SELECT “desc-item” as sc_field_1, “it-codigo” as sc_field_0, un from PUB.item where “it-codigo” <> ‘’ and “it-codigo” <> ‘.’ order by “desc-item” asc, “it-codigo” desc WITH (NOLOCK) asc, 17, 0)

Script: C:\Program Files (x86)\NetMake\v6\wwwroot\scriptcase\app\RATWEB_IW\ratweb_item_con\ratweb_item_con_grid.class.php (541)

Sem a cláusula WITH (NO LOCK):

(odbc): select count(*) from PUB.item where “it-codigo” <> ‘’ and “it-codigo” <> ‘.’
(odbc): SELECT “desc-item” as sc_field_1, “it-codigo” as sc_field_0, un from PUB.item where “it-codigo” <> ‘’ and “it-codigo” <> ‘.’ order by “desc-item” asc, “it-codigo” desc

Não ocorre erro.

Sem a cláusula WITH (NOLOCK):

(odbc): select count(*) from PUB.item where “it-codigo” <> ‘’ and “it-codigo” <> ‘.’
(odbc): SELECT “desc-item” as sc_field_1, “it-codigo” as sc_field_0, un from PUB.item where “it-codigo” <> ‘’ and “it-codigo” <> ‘.’ order by “desc-item” asc, “it-codigo” desc

Não ocorre erro.

Segue uma aplicação de controle em modo debug onde são executados diversos diversos sc_lookup, também não ocorre erro, o que significa que a cláusula WITH (NOLOCK) é aceita pelo SQL do ODBC, e funciona perfeitamente evitando o travamento das tabelas.

(odbc): Select valor from PUB.ratw_mysession where id=‘oal320vfnt46p3n99b4h6s7qu0’ and chave=‘user_perfil’ WITH (NOLOCK)
(odbc): SELECT TOP 1 “cod_chamado”,“nr_rat”,“tipo_servico”,“cod_contrato”,“cod_emitente”,“tipo_contrato”,“cod_equipto”,“num_serie”,“nm_equipto”,“nm_cliente”,“cd_tecnico”,“tem_contrato” FROM PUB.ratw_chamado WHERE nr_RAT=12646101 WITH (NOLOCK)
(odbc): Select valor from PUB.ratw_mysession where id=‘oal320vfnt46p3n99b4h6s7qu0’ and chave=‘user’ WITH (NOLOCK)
(odbc): SELECT TOP 1 cod_chamado, dt_encerra FROM PUB.ratw_chamado WHERE cod_chamado < 26461 AND cod_equipto = ‘CV02.1070.0035.1’ AND cod_emitente = ‘19’ ORDER BY cod_chamado DESC WITH (NOLOCK)
(odbc): SELECT TOP 1 Validado, cod_atendimento, status_atend FROM PUB.ratw_aponta WHERE cod_chamado=‘26461’ AND nr_rat=‘12646101’ WITH (NOLOCK)

Minha observação a respeito:

A NM tentando evitar o esquecimento por parte do programador a parâmetro ASC ou DESC nos selects da consulta quando da inserção da cláusula ORDER BY, ele adiciona internamente a palavra ASC, e o mesmo esta achando que é isso que esta acontecendo, só que a última cláusula não é uma ORDER BY e sim WITH NOLOCK)

Vejam o exemplo:
No select principal digitei:

[code]SELECT
“it-codigo”,
“desc-item”,
un
FROM
PUB.item
WHERE
“it-codigo” <> ‘’ and “it-codigo” <> ‘.’

Order by “desc-item”[/code]

e o debug apresenta:

(odbc): select count(*) from PUB.item where “it-codigo” <> ‘’ and “it-codigo” <> ‘.’
(odbc): SELECT “desc-item” as sc_field_1, “it-codigo” as sc_field_0, un from PUB.item where “it-codigo” <> ‘’ and “it-codigo” <> ‘.’ order by “desc-item” asc

Vejam que o sc adicionou sozinho a palavra asc, só que a NM não prevê que a clausula anterior é um order by, ela deve usar um search na instrução para verificar se existe a clausula e se a última palavra não for “ASC” ou “DESC” ela adiciona o "ASC"internamente, o erro que que não deve usar um search para verificar se existe a clausula ORDER BY, e sim verificar se esta é a última cláusula da instrução.

Caroline,

Não fui muito claro no post anterior. Me referia ao SELECT realizado na sua consulta do SC (e não o select gerado pelo SC).

O select da sua aplicação é este do último post?

att,
Bernhard Bernsmann

Select da aplicação:

SELECT "desc-item", "it-codigo", un from PUB.item where "it-codigo" <> '' and "it-codigo" <> '.' order by "desc-item" asc, "it-codigo" desc WITH (NOLOCK)

Obrigado pelo feedback.

Problema reportado para nossa equipe de bugs.

att,
Bernhard Bernsmann

Boa tarde, gostaria de saber o como configuro esse drive ODBC no Scriptcase estou tentando fazer isso e não estou sabendo por onde começar!

Daniel

Por favor, abra um tópico novo e informe a sua versão e ambiente em que roda a IDE e a Produção.

Esse tópico devido a data esta prejudicado.