Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Ошибка запуска SQL-скрипта из Delphi / 24 сообщений из 24, страница 1 из 1
27.03.2007, 10:24
    #34417478
Lily V.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
Может, не совсем там спрашиваю, но все-таки надеюсь на помощь.
При попытке запуска скрипта из Delphi получаю следующую ошибку:
ESDSybError with message 'Client-Library error 411: ct_res_info(): user api layer: external error: This routine cannot be called when the command structure is idle
Этот же скрипт отрабатывает в Interactive SQL без проблем.
Скрипт примерно такой:
begin
if not exists (select 1 from dba.const where short_name = 'INS_ID')
then insert into dba.const(const_id, short_name)
values (30, 'INS_ID', 'Код (из справочника)');
end if;

// дальше ALTER TABLE (добавляется колонка в таблицу)
......скип.........
end;

В Delphi текст запроса грузится из файла таким образом:
with query do
try
close; SQL.Clear;
SQL.LoadFromFile(search_path + sr.Name);
open;
except
Memo.Lines.Add('Ошибка исполнения скрипта');
end;
Помогите, пожалуйста, разобраться, в чем ошибка.

info: ASA 8.0.2.4424, Delphi v.7
...
Рейтинг: 0 / 0
27.03.2007, 11:05
    #34417622
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
если вы работаете с АСА - переходите на ODBC
...
Рейтинг: 0 / 0
27.03.2007, 11:27
    #34417699
Lily V.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
зачем? Я использую компоненты SQLDirect, которые предназначены для доступа к базам данных, в том числе и ASA.
...
Рейтинг: 0 / 0
27.03.2007, 13:48
    #34418285
Lily V.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
других вариантов (ответов) нет?
...
Рейтинг: 0 / 0
27.03.2007, 14:12
    #34418377
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
Lily V. wrote:

> других вариантов (ответов) нет?

Вряд ли кому-то интересны подробности интимной жизни не очень известного
набора компонент, работающего с ASA через OSG.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
27.03.2007, 15:12
    #34418647
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
ct_res_info()
это явно клиент для ASE не для ASA
вроде-бы это не страшно т.к. должно работать.
но эта ошибка значит что с базой ваша компонента работает неверно

для инфы: ODBC более родной для ASA чем ASE клиент
...
Рейтинг: 0 / 0
27.03.2007, 16:12
    #34418911
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
Dmitry. wrote:

> ct_res_info()
> это явно клиент для ASE не для ASA

Ну так на сайте в ФАКе написано, что с ASA оно работает через OSG - т.е.
ASA маскируется под ASE.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
28.03.2007, 09:10
    #34420249
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
Lily V.
Скрипт примерно такой:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
begin
if not exists (select  1  from dba.const where short_name = 'INS_ID')
then insert into dba.const(const_id, short_name)
values ( 30 , 'INS_ID', 'Код (из справочника)');
end if;

// дальше ALTER TABLE (добавляется колонка в таблицу)
......скип.........
end;
...
Код: plaintext
1.
2.
SQL.LoadFromFile(search_path + sr.Name);
open;

В VCL'евском TQuery:
1. Можно выполнить только одну SQL команду.
2. не open , а ExecSQL (раз уж у Вас ALTER)
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
28.03.2007, 09:50
    #34420345
Марсель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
Ex_Soft
В VCL'евском TQuery:
1. Можно выполнить только одну SQL команду.
2. не open , а ExecSQL (раз уж у Вас ALTER)

не совсем так, если сделать
Код: plaintext
1.
insert into ...;
select @@identity
то можно делать Open
имхо последним должен быть select ...
...
Рейтинг: 0 / 0
28.03.2007, 10:51
    #34420610
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
Марсель
если сделать
Код: plaintext
1.
2.
insert into ...;
select @@identity

Ex_Soft
В VCL 'евском TQuery :
1. Можно выполнить только одну SQL команду.

Код: plaintext
1.
2.
3.
4.
Query1->SQL->Clear();
Query1->SQL->Add("insert into MasterTable (Value) values ('10');");
Query1->SQL->Add("select @@identity");
Query1->Open();
EDBEngineError
General SQL error.
Incorrect syntax near ';'.

_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
28.03.2007, 11:28
    #34420827
Марсель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
У Вас там все такие крикливые?
лично у меня в D6, D7 все работает
...
Рейтинг: 0 / 0
28.03.2007, 11:34
    #34420853
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
Марсель
лично у меня в D6, D7 все работает

если не трудно - код покажите, pls...

P.S. BCB6+Upg4
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
28.03.2007, 12:03
    #34421010
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
I'm so sorry...
Перепутал
Lily V.
Я использую компоненты SQLDirect

с SQL-Links
...
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
28.03.2007, 12:13
    #34421065
Lily V.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
Всем спасибо за разъяснения. теперь понятно, в чем дело
...
Рейтинг: 0 / 0
31.03.2007, 15:15
    #34429218
Анатолий Иванов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
Ex_SoftВ VCL'евском TQuery:
1. Можно выполнить только одну SQL команду.

А вот это не правда. Если не используются параметры - то можно.
...
Рейтинг: 0 / 0
01.04.2007, 13:53
    #34429743
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
Анатолий Иванов
Если не используются параметры - то можно.

Приведите, пожалуйста, кусочек кода.
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
02.04.2007, 07:08
    #34430262
golsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
TQuery не анализирует и не исполняет SQL, а просто передает провайдеру. Поэтому от провайдера зависит - будет исполняться Script или только одиночный SQL. Как правило, если работать через провайдер, который установлен клиентом базы данных, скрипты исполняются.
...
Рейтинг: 0 / 0
02.04.2007, 11:01
    #34430625
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
Ну к чему этот софизм? Возьмите, попробуйте и приведите рабочий код.

2moderator
Все оффтоповые посты по поводу компоненты, IMHO, можно перенести, 4 example, сюда ...
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
02.04.2007, 13:53
    #34431222
A.K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
Ex_SoftНу к чему этот софизм? Возьмите, попробуйте и приведите рабочий код.
и правда, к чему... через ODBC-драйвер от Sybase стандартный TQuery действительно выполняет скрипты, но только не содержащие параметров.
...
Рейтинг: 0 / 0
02.04.2007, 16:54
    #34431872
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
1. Прописываю в ODBC в User DSN TestSybaseByODBC (Sybase ASE ODBC Driver (x:\sybase\ODBC\SYODASE.DLL ver. 04.20.0015))
2. Бросаю на форму
- TDatabase
- TSession
- TQuery
3.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
void __fastcall TDataBases::DataModuleCreate(TObject *Sender)
{
   try
   {
      Database->AliasName="TestSybaseByODBC";
      Database->Params->Clear();
      Database->Params->Add("HOST NAME=localhost");
      Database->Params->Add("SERVER NAME=TEST_SRV");
      Database->Params->Add("DATABASE NAME=testdb");
      Database->Params->Add("USER NAME=sa");
      Database->Params->Add("PASSWORD=");
      Database->DatabaseName="testdb";
      Database->LoginPrompt=false;

      Session1->SessionName="TestSession";
      Database->SessionName=Session1->SessionName;

      Database->Open();
      if(Database->Connected)
      {
         Query1->DatabaseName="testdb";
         Query1->SessionName=Session1->SessionName;

         Query1->SQL->Clear();
         Query1->SQL->Add("if not exists (select 1 from sysobjects where (id=object_id('TestTable')) and (type='U')) create table TestTable(ID numeruc(18) identity, Name varchar(256) null) lock datarows with identity_gap=10");
         Query1->SQL->Add("go");
         Query1->SQL->Add("insert into TestTable (Name) values ('Иванов Иван Иванович')");
         Query1->SQL->Add("go");
         Query1->ExecSQL();
      }
   }
   catch(EDBEngineError &eException)
   {
      ShowMessage("EDBEngineError: Message=\""+eException.Message+"\"");
   }
   catch(EDatabaseError &eException)
   {
      ShowMessage("EDatabaseError: Message=\""+eException.Message+"\"");
   }
   catch(Exception &eException)
   {
      ShowMessage("Exception: Message=\""+eException.Message+"\"");
   }
}
//---------------------------------------------------------------------------
EDBEngineError
General SQL error.
[DataDirect][ODBC Sybase Wire Protocol driver][SQL Server]Incorrect syntax near 'go'.

Аналогично, если go убрать и вместо него ;
Научите, покажите, подправьте...

P.S. BCB6+Upg4 w2k+sp3
P.P.S. select @@version
Adaptive Server Enterprise/12.5.1/EBF 11428/P/NT (IX86)/OS 4.0/ase1251/1823/32-bit/OPT/Wed Sep 17 11:10:54 2003


_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
02.04.2007, 17:49
    #34432106
A.K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
Ex_Soft1. Прописываю в ODBC в User DSN TestSybaseByODBC (Sybase ASE ODBC Driver (x:\sybase\ODBC\SYODASE.DLL ver. 04.20.0015))
вообще-то мы про ASA говорим.
смотрите первый пост топика.
...
Рейтинг: 0 / 0
02.04.2007, 17:50
    #34432113
A.K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
а если убрать и go и ; ? с точки зрения TSQL это будет корректный скрипт
...
Рейтинг: 0 / 0
02.04.2007, 18:50
    #34432359
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
гм...
действительно
Код: plaintext
1.
2.
3.
4.
5.
Query1->SQL->Clear();
Query1->SQL->Add("if not exists (select 1 from sysobjects where (id=object_id('TestTable')) and (type='U')) create table TestTable(ID numeric(18) identity, Name varchar(256) null) lock datarows with identity_gap=10");
Query1->SQL->Add("insert into TestTable (Name) values ('Иванов Иван Иванович')");
Query1->SQL->Add("insert into TestTable (Name) values ('Петров Петр Петрович')");
Query1->ExecSQL();
отработало...
Но при запуске во второй раз
EDBEngineError
General SQL error.
[DataDirect][ODBC Sybase Wire Protocol driver][SQL Server]There is already an object named 'TestTable' in the database.

Значит к if 'у отнеслись положительно (производная от слова "положить"
)
Резюмируя все: получается, таки, действительно можно выполнить несколько команд, но, по крайней мере, исходя из произведенного опыта, с логическими операторами в скрипте возникают грабли.
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
02.04.2007, 20:38
    #34432529
A.K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка запуска SQL-скрипта из Delphi
С ASA при использовании связки SQL Links-ODBC на D5 без проблем отрабатывает:
Код: plaintext
1.
2.
3.
Query1.SQL.Text := 'if not exists (select 1 from SYSTABLE where table_name=''A_A_TEST1'') '# 13 +
  'create table A_A_TEST1(id int not null primary key)';
Query1.ExecSQL();
Хотя сама идея использовать такую связку - вещь безусловно тухлая.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Ошибка запуска SQL-скрипта из Delphi / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]