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

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

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:BackupOneDriveDocumentsVisual Studio 2017My 
ProjectsBackupsMAARS SoftwareDataBase.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];
        }
    }
}

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

       }

    }

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

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

Я не пробовал цепляться к базе с помощью 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 «

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

В начало

Профиль  

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

Понравилась статья? Поделить с друзьями:

Новое и полезное:

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

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии