Ошибочная инструкция sql предполагалось delete

1
2
3
4
5
6
7
8
9
 TFieldType = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord, // 0..4
    ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, // 5..11
    ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo, // 12..18
    ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar, ftWideString, // 19..24
    ftLargeint, ftADT, ftArray, ftReference, ftDataSet, ftOraBlob, ftOraClob, // 25..31
    ftVariant, ftInterface, ftIDispatch, ftGuid, ftTimeStamp, ftFMTBcd, // 32..37
    ftFixedWideChar, ftWideMemo, ftOraTimeStamp, ftOraInterval, // 38..41
    ftLongWord, ftShortint, ftByte, ftExtended, ftConnection, ftParams, ftStream, //42..48
    ftTimeStampOffset, ftObject, ftSingle); //49..51

Автор Сообщение

Заголовок сообщения: Работа с SQL

Добавлено: Пт май 31, 2013 08:46 



Регистрация: Сб дек 06, 2008 10:45
Сообщения: 83
Откуда: Благовещенск

Сделал Recordset с текстом SQL такого содержания:

Код:

SELECT Procedures.Date_procedure, Procedures.Bath_mineral, Procedures.Bath_herb, Procedures.Shower_intestinal, Procedures.Hydromassage, Procedures.Aerovanny, Procedures.Shower_power, Procedures.Shower_circular, Procedures.Shower_ascending
FROM Procedures
WHERE (((Procedures.Date_procedure)=myDate));

myDate задается как параметр.

При попытке соединения к БД в самом супервайзере появляется ошибка:

Код:

Source:
ADO

Description:
Unknown error has occurred

Жмешь по кнопке Close появляется след ошибка:

Код:

Source:
Microsoft OLE DB Provider for ODBC Drivers

Description:
[Microsoft][Драйвер ODBC Microsoft Access] Ошибочная
инструкция SQL; предполагалось ‘DELETE’, ‘INSERT’,
‘PROCEDURE’, ‘SELECT’ или ‘UPDATE’.

Снова жмешь по кнопке Close появляется след ошибка:

Код:

Source:
Microsoft OLE DB Provider for ODBC Drivers

Description:
[Microsoft][Драйвер ODBC Microsoft Access] Слишком
мало параметров. Требуется 1.

И в итоге в супервайзере всё таки подключается к БД.

Что не так не пойму.
Также при запуске рантайма выдает ошибку, что не может открыть базу.

В начало

 

Миханик

Заголовок сообщения: Re: Работа с SQL

Добавлено: Пт май 31, 2013 10:32 



Регистрация: Сб дек 06, 2008 10:45
Сообщения: 83
Откуда: Благовещенск

или каким еще образом можно вытащить из БД одну запись по с заданным значением даты, одного из полей?

В начало

 

Олег

Заголовок сообщения: Re: Работа с SQL

Добавлено: Пт май 31, 2013 10:54 



Регистрация: Вт сен 19, 2006 21:13
Сообщения: 3580
Откуда: Москва

Я не пробовал цепляться к базе с помощью SQL запроса
вместе с супервайзором идёт пример Database. посмотрите как там сделано, только возможно пути к источникам данных поправить придётся.

Записей на дату может быть несколько, самое простое отфильтровать нужное командой DBExecute( база, «Filter», текст фильтра )
здесь в Downloads для супервайзора есть пример в котором записи по дате и тексту вытаскиваются.

В начало

 

AndyRay

Заголовок сообщения: Re: Работа с SQL

Добавлено: Пт май 31, 2013 12:31 



Регистрация: Пт июл 01, 2011 07:15
Сообщения: 32
Откуда: Ижевск

Миханик писал(а):

Сделал Recordset с текстом SQL такого содержания:

Код:

SELECT Procedures.Date_procedure, Procedures.Bath_mineral, Procedures.Bath_herb, Procedures.Shower_intestinal, Procedures.Hydromassage, Procedures.Aerovanny, Procedures.Shower_power, Procedures.Shower_circular, Procedures.Shower_ascending
FROM Procedures
WHERE (((Procedures.Date_procedure)=myDate));

myDate задается как параметр.

При попытке соединения к БД в самом супервайзере появляется ошибка:

Код:

Source:
ADO

Description:
Unknown error has occurred

Попробуйте упростить текст рекордсета :

Код:

SELECT * FROM Procedures

а запрос параметров из базы осуществляйте из скрипта при помощи конструкции на вроде:

Код:

DBClose( «Connection1.Procedures» )
SQL = «SELECT * FROM Procedures where Date_procedure =  ‘»+ myDate + «‘ «
call DBExecute( «Connection1.Procedures», «Source», SQL )
DBOpen( «Connection1.Procedures» )

В начало

 

Миханик

Заголовок сообщения: Re: Работа с SQL

Добавлено: Пн июн 03, 2013 04:44 



Регистрация: Сб дек 06, 2008 10:45
Сообщения: 83
Откуда: Благовещенск

Олег
спасибо, чуть позже посмотрю

AndyRay
спасибо, Ваш вариант сработал

И еще впорос, который меня уже давно мучает и я всё никак не разберусь:

Если я создаю Connection и добавляю RecordSet, то потом при открытии командой DBOpen(«Connection1.RecordSet1») появляется ошибка и БД не открывается..
Текст ошибки:

Код:

Faled to open Recordset: Connection1.RecordSet1
Execotion of function: DBOpen Failed !

А если полностью открывать Connection1 командой DBOpen(«Connection1»), а в RecordSet1 поставить галочку «открывать при подключении», то все нормально открывается.
Из-за чего такое может быть?

В начало

 

AndyRay

Заголовок сообщения: Re: Работа с SQL

Добавлено: Пн июн 03, 2013 07:28 



Регистрация: Пт июл 01, 2011 07:15
Сообщения: 32
Откуда: Ижевск

Миханик писал(а):

Олег
спасибо, чуть позже посмотрю

AndyRay
спасибо, Ваш вариант сработал

И еще впорос, который меня уже давно мучает и я всё никак не разберусь:

Если я создаю Connection и добавляю RecordSet, то потом при открытии командой DBOpen(«Connection1.RecordSet1») появляется ошибка и БД не открывается..
Текст ошибки:

Код:

Faled to open Recordset: Connection1.RecordSet1
Execotion of function: DBOpen Failed !

А если полностью открывать Connection1 командой DBOpen(«Connection1»), а в RecordSet1 поставить галочку «открывать при подключении», то все нормально открывается.
Из-за чего такое может быть?

На вскидку сложно сказать…Можно увидеть параметры, с которыми создан рекордсет?

В начало

 

Миханик

Заголовок сообщения: Re: Работа с SQL

Добавлено: Пн июн 03, 2013 08:48 



Регистрация: Сб дек 06, 2008 10:45
Сообщения: 83
Откуда: Благовещенск

вот действующий RecordSet и не важно что выбирать в качестве источника Table Name или SQL Text:

У вас нет необходимых прав для просмотра вложений в этом сообщении.

В начало

 

AndyRay

Заголовок сообщения: Re: Работа с SQL

Добавлено: Пн июн 03, 2013 10:14 



Регистрация: Пт июл 01, 2011 07:15
Сообщения: 32
Откуда: Ижевск

Из практики ошибка

Код:

Execution of function: DBOpen Failed !

может возникать при недоступности источника данных(изменилось название\структура таблицы, с которой связан рекордсет к примеру).
Рекомендую проверить на корректность текст SQL запросов, которые отправляются к БД.
Можно воспользоваться профайлером AnjLab SQLProfiler http://anjlab.com/ru/projects/opensource/sqlprofiler

Так же перед изменением источника данных рекордсета командой

Код:

call DBExecute( «Connection1.Procedures», «Source», SQL )

рекордсет необходимо закрыть.

В начало

 

Даниил

Заголовок сообщения: Re: Работа с SQL

Добавлено: Вт ноя 27, 2018 11:44 



Регистрация: Ср ноя 07, 2018 14:39
Сообщения: 4

Сделал Recordset c SQL текстом такого содержания:

SELECT * FROM tect where KOD=324542

При открытие Recordset, все отлично он связывается с базой данных и выводит нужную строчку, а если меняю содержимое Recordset:

SELECT * FROM tect

А скриптом пытаюсь задать запрос к базе данных:

DBClose( «Connection2.Recordset1» )
SQL = «SELECT * FROM tect where KOD=324542 «
call DBExecute( «Connection2.Recordset1», «Source», SQL )
DBOpen( «Connection2.Recordset1» )

Выдает ошибки:
Faled to open Recordset: Connection2.Recordset1
Execotion of function: DBOpen Failed !

Может ли на это влиять что версия CX-Surervisor Trial?
Или может в самой базе какие то разрешения надо включить? (MS SQL 2008)

В начало

 

olegzh

Заголовок сообщения: Re: Работа с SQL

Добавлено: Чт ноя 29, 2018 00:14 



Регистрация: Ср июн 15, 2011 11:20
Сообщения: 91
Откуда: UA

а может сначала надо открыть (open) соединение, а потом вызвать (execute) запрос?

В начало

 

Даниил

Заголовок сообщения: Re: Работа с SQL

Добавлено: Чт ноя 29, 2018 08:07 



Регистрация: Ср ноя 07, 2018 14:39
Сообщения: 4

Все спасибо разобрался, причина была в том, что переменная

SQL = «SELECT * FROM tect where KOD=324542 «

была не текстового формата, я видимо не заметил этого когда выбирал ее.

В начало

 

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 1
Всего: 50

Как запросом удалить все записи таблицы? (C++ Builder 6.0, ADO, MDB)
Делаю так:

Код

qryData->SQL->Text = "TRUNCATE TABLE T_DATA;";
qryData->ExecSQL();

Получаю:

Код

Project Project.exe raised exception class EOleException with message 'Ошибочная инструкция SQL; предполагалось 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' или 'UPDATE''. Process stopped. Use Step or Run to continue.

Или оператор TRUNCATE только для  T_SQL???

0

a_ivanov

08.09.08

18:25

Народ кто записывал данные в DBF через ADO посредством многострочного запроса? Пишет ошибку «Пропущен символ (;) в конце инструкции SQL.»Ставлю точку с запятой пишет другую ошибку: «Ошибочная инструкция SQL; предполагалось ‘DELETE’, ‘INSERT’, ‘PROCEDURE’, ‘SELECT’ или ‘UPDATE'»

Текст запроса такой:

Insert into cashTax Values(‘2’, ‘1’, ‘1’, ‘1423’, ‘1’, ‘1’, ‘1’, ’18’, ’18 %’, ‘1,53’, ‘1,53’)

Insert into cashSail Values(‘2’, ‘1’, ‘1’, ‘1423’, ‘1’, ‘05.09.2008’, ‘1608’, ’14’, ‘NOSIZE’, ’10’, ‘1’, ’10’, ’10’, ’10’, ‘0’, ‘1’, ‘1’, ‘1’, ‘1’, ‘0’, ‘0’, ‘0’)

По одной строке все нормально записывает

1

Rebelx

08.09.08

19:17

попробуй:

BEGIN

Запрос1;

Запрос2;

END

(так оракл понимает)

2

smaharbA

09.09.08

06:34

пеши в одну строку и с ;
(и че у тебя в таблице, все чары ? )

3

a_ivanov

09.09.08

10:33

Не так тоже не работает. На sql.ru говорят вообще так не получиться :-(((

4

smaharbA

09.09.08

12:33

(3) получится
Insert into cashTax Values(‘2’, ‘1’, ‘1’, ‘1423’, ‘1’, ‘1’, ‘1’, ’18’, ’18 %’, ‘1,53’, ‘1,53’);Insert into cashSail Values(‘2’, ‘1’, ‘1’, ‘1423’, ‘1’, ‘05.09.2008’, ‘1608’, ’14’, ‘NOSIZE’, ’10’, ‘1’, ’10’, ’10’, ’10’, ‘0’, ‘1’, ‘1’, ‘1’, ‘1’, ‘0’, ‘0’, ‘0’);

Вот к примеру, работает и не жужит

cmd="SET DATEFORMAT YMD;INSERT INTO [" & BaseSQL & "].[dbo].[" & TableSQL & "] ([DATELOG],[SERVICE],[USER],[METH],[SOUR],[PORTS],[DEST],[PORTD],[BYTEIN],[BYTEOUT],[BYTEALL],[CODE]) VALUES (CAST('" & datelog & "' AS DATETIME),'" & service & "','" & user & "','" & meth & "','" & sour & "'," & ports & ",'" & dest & "'," & portd & "," & bytein & "," & byteout & "," & byteall & ",'" & code & "');"
call rs.Open(cmd,con,3,1,1)

    string ConStr;

    string StrInsert = «Provider=Microsoft.Jet.OLEDB.4.0;Data Source=» + Application.StartupPath + «\\» + «;Extended Properties=dBASE IV;User ID=Admin;Password=»;

    string path = «C:\\base\\»;

    string query = » select distinct law.pers_num_k, law.family_k, law.name_k, law.father_k, law.d_rogd_k, law.d_sm, reg.pers_num, reg.family, reg.name, reg.father, lcn.sv from lawdat_p as law, register as reg, lcn as lcn where (law.family_k is not null) and (law.name_k is not null) and (reg.num = law.num) and (reg.num = lcn.num) order by law.family_k, law.name_k, law.father_k, law.d_rogd_k, law.d_sm»;

    string in_str = » insert into regdate (pers_num, family, name, father, d_rogd, d_sm, rayon, pers_num_n, family_n, father_n, name_n, sv) values (@pers_num, @family, @name, @father, @d_rogd, @d_sm, @rayon, @pers_num_n, @family_n, @father_n, @name_n, @sv)»;

    DirectoryInfo dir = new DirectoryInfo(path);

    DirectoryInfo[] ds = dir.GetDirectories();

    foreach (DirectoryInfo d in ds)

    {

      try

      {

         ConStr = «Provider=Microsoft.Jet.OLEDB.4.0;Data Source=» + path + d.Name + «\\» + «;Extended Properties=dBASE IV;User ID=Admin;Password=»;

         OleDbConnection conn = new OleDbConnection(ConStr);

         OleDbCommand cmd = new OleDbCommand(query, conn);

         conn.Open();

         OleDbDataReader reader = cmd.ExecuteReader();

         while (reader.Read())

         {

             OleDbConnection conn1 = new OleDbConnection(StrInsert);

             OleDbCommand cmd1 = new OleDbCommand(in_str, conn1);

             cmd1.Parameters.Add(«@pers_num», OleDbType.Char);

             cmd1.Parameters[«@pers_num»].Value = reader[0];

             cmd1.Parameters.Add(«@family», OleDbType.Char);

             cmd1.Parameters[«@family»].Value = reader[1];

             cmd1.Parameters.Add(«@name», OleDbType.Char);

             cmd1.Parameters[«@name»].Value = reader[2];

             cmd1.Parameters.Add(«@father», OleDbType.Char);

             cmd1.Parameters[«@father»].Value = reader[3];

             cmd1.Parameters.Add(«@d_rogd», OleDbType.Date);

             cmd1.Parameters[«@d_rogd»].Value = reader[4];

             cmd1.Parameters.Add(«@d_sm», OleDbType.Date);

             cmd1.Parameters[«@d_sm»].Value = reader[5];

             cmd1.Parameters.Add(«@rayon», OleDbType.Char);

             cmd1.Parameters[«@rayon»].Value = d.Name;

             cmd1.Parameters.Add(«@pers_num_n», OleDbType.Char);

             cmd1.Parameters[«@pers_num_n»].Value = reader[6];

             cmd1.Parameters.Add(«@family_n», OleDbType.Char);

             cmd1.Parameters[«@family_n»].Value = reader[7];

             cmd1.Parameters.Add(«@name_n», OleDbType.Char);

             cmd1.Parameters[«@name_n»].Value = reader[8];

             cmd1.Parameters.Add(«@father_n», OleDbType.Char);

             cmd1.Parameters[«@father_n»].Value = reader[9];

             cmd1.Parameters.Add(«@sv», OleDbType.Char);

             cmd1.Parameters[«@sv»].Value = reader[10];

             conn1.Open();

             cmd1.ExecuteNonQuery();

             conn1.Close();    

         }

         reader.Close();

       }

       catch (Exception ex)

       {

           MessageBox.Show(ex.Message);

       }

    }

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Lansky точильная система инструкция
  • Модуль обхода иммобилайзера starline bp 03 инструкция
  • Гамавит для собак инструкция по применению дозировка перорально
  • Инструкция робота кая лего
  • Горыныч для выгребных ям инструкция по применению отзывы