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

    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);

       }

    }

Logo
MurCode

  • Форумы
  • Поиск
  • О проекте

irinka

Дата: 17.03.2004 22:50:55

При выполнении выдается такая ошибка:

Ошибочная инструкция SQL: предполагалось delete, insert, procedure, select, update

В коде есть такая строка:

rst2.Open «qrySumma»

«qrySumma» — сохраненный запрос (запрос1), который при выполнении использует поле из др запроса (запрос2), который выполняется, если запущена определенная форма, из которой запрос2 берет две даты в качестве условия выборки.

Что не так может быть в этом запросе?

Deminik

Дата: 18.03.2004 04:55:56

А если попробовать строкой SQL… У меня встречались такие нюансы….

Когда писал rst.Open «myQuery2″…. (вылетала эта твоя ошибка), а когда писал так — все работало:


Dim strSQL as String
strSQL = "select * from myQuery1"
rst.Open strSQL...
...

Попытка — не пытка…

irinka

Дата: 18.03.2004 22:34:48

попробывала, но ругается на строку

rst2.Open strSQL1

а именно:

Dim strSQL1 As String



strSQL1 = «Select * from qrySumma»



rst2.Open strSQL1

Владимир Саныч

Дата: 18.03.2004 22:38:36

Видимо, Deminik имел в виду не Select * from qrySumma, а взять сам текст запроса qrySumma и поставить его сюда.

irinka

Дата: 18.03.2004 22:46:21

сам запрос я уже пробовала, но к сожалению, неудачно,

кстати, тот запрос, кот я хочу вставить описан выше в вопросе ошибка в group by.

Он работает если использовать так

SELECT Сотрудники.[Табельный № сотрудника], [Должности]![Оклад]/[Праздники]![KolDneyZadano]*[CountYavok]![KolYavok] AS Summa

FROM Праздники, CountYavok, Сотрудники INNER JOIN Должности ON Сотрудники.[Табельный № сотрудника] = Должности.[Табельный № сотрудника]

WHERE ((([Праздники]![s])=[Forms]![ЖурналХозОп1]![с]) AND (([Праздники]![po])=[Forms]![ЖурналХозОп1]![по]) AND ((Сотрудники.[Табельный № сотрудника])=[CountYavok]![Код сотрудника]))

GROUP BY Сотрудники.[Табельный № сотрудника], [Должности]![Оклад]/[Праздники]![KolDneyZadano]*[CountYavok]![KolYavok];

но если в поле Summa использовать вычисляемое поле KolYavok, подсчитанное в этом же запросе, то уже не идет.

Владимир Саныч

Дата: 18.03.2004 22:48:38

Что-то я не вижу, чтобы поле KolYavok было подсчитано в том же запросе.

irinka

Дата: 18.03.2004 22:49:59

Count(Явка.Явка) AS KolYavok

Владимир Саныч

Дата: 18.03.2004 22:55:18

Уважаемая, в этом запросе нет никакого Явка.Явка.

irinka

Дата: 18.03.2004 23:00:02

в данной теме, в моем ответе, кот несколькими пунктами выше я привела пример того же запроса, кот в итоге мне нужен (он работает), но там используется вспом запрос CountYavok с полем KolYavok? а др топикея пыталась перейти к одному запросу, в кот и считается в нем же Count. Вы мне еще сказали про него как это в group by count. Как это может идти представлено в запросе со вспом запросом

извините за путанность

Владимир Саныч

Дата: 18.03.2004 23:02:05

I’m making an Accounting project in C# Visual Studio 2017 and I have three forms:

  1. Login
  2. Main
  3. Product Entry

1st and 2nd form work properly, but when I clicked the button of Product Entry (3rd form),
project doesn’t go to 3rd form and it shows this error:

System.Data.OleDb.OleDbException: ‘Invalid SQL statement; expected
‘DELETE’, ‘INSERT’, ‘PROCEDURE’, ‘SELECT’, or ‘UPDATE’.’

My code is:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Configuration;
using MetroFramework;

namespace MAARS_Software.Project
{
    public partial class frmProductEntry : MetroFramework.Forms.MetroForm
    {
        OleDbConnection con = new 
OleDbConnection(ConfigurationManager.AppSettings["con"]);
        OleDbConnection conn = new 
OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data 
Source=D:\Backup\OneDrive\Documents\Visual Studio 2017\My 
Projects\Backups\MAARS Software\DataBase.accdb;
Jet OLEDB: Database Password = 654321");

    public frmProductEntry()
    {
        InitializeComponent();
    }

    private void frmProductEntry_Load(object sender, EventArgs e)
    {
        ViewData();
    }

    private void Save_btn_Click(object sender, EventArgs e)
    {

    }

    private void Update_btn_Click(object sender, EventArgs e)
    {

    }

    private void Delete_btn_Click(object sender, EventArgs e)
    {

    }

    private void Exit_btn_Click(object sender, EventArgs e)
    {

    }
    void ViewData()
    {
        OleDbDataAdapter da = new OleDbDataAdapter("Selct * from [Product]", 
con);
        //DataTable dt = new DataTable();
        //da.Fill(dt);
        DataSet ds = new DataSet();
        da.Fill(ds);                //Error stop here
        dataGridView1.DataSource = ds.Tables[0];
        }
    }
}

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

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

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

Не в сети
Аватара пользователя



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

Сделал 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
Сообщения: 78
Откуда: Благовещенск

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

В начало

Профиль  

Олег

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

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



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

Я не пробовал цепляться к базе с помощью 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
Сообщения: 78
Откуда: Благовещенск

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

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
Сообщения: 78
Откуда: Благовещенск

вот действующий 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 «

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

В начало

Профиль  

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)

Понравилась статья? Поделить с друзьями:
  • Ошибки на панели приборов ваз 2112 европанель инструкция
  • Ошибка синтаксиса в инструкции update access
  • Ошибка синтаксиса в инструкции create table access
  • Ошибка приложения explorer exe инструкция по адресу
  • Офельтаминвир цена инструкция по применению