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:
- Login
- Main
- 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
|
|||
|
Сделал 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 myDate задается как параметр. При попытке соединения к БД в самом супервайзере появляется ошибка: Код: Source: Description: Жмешь по кнопке Close появляется след ошибка: Код: Source: Description: Снова жмешь по кнопке Close появляется след ошибка: Код: Source: Description: И в итоге в супервайзере всё таки подключается к БД. Что не так не пойму. |
||
В начало |
|
||
Миханик |
Заголовок сообщения: Re: Работа с SQL
|
|
или каким еще образом можно вытащить из БД одну запись по с заданным значением даты, одного из полей? |
В начало |
|
Олег |
Заголовок сообщения: Re: Работа с SQL
|
|
Я не пробовал цепляться к базе с помощью SQL запроса Записей на дату может быть несколько, самое простое отфильтровать нужное командой DBExecute( база, «Filter», текст фильтра ) |
В начало |
|
AndyRay |
Заголовок сообщения: Re: Работа с SQL
|
|
Миханик писал(а): Сделал 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 myDate задается как параметр. При попытке соединения к БД в самом супервайзере появляется ошибка: Код: Source: Description: Попробуйте упростить текст рекордсета : Код: SELECT * FROM Procedures а запрос параметров из базы осуществляйте из скрипта при помощи конструкции на вроде: Код: DBClose( «Connection1.Procedures» ) |
В начало |
|
Миханик |
Заголовок сообщения: Re: Работа с SQL
|
|
Олег AndyRay И еще впорос, который меня уже давно мучает и я всё никак не разберусь: Если я создаю Connection и добавляю RecordSet, то потом при открытии командой DBOpen(«Connection1.RecordSet1») появляется ошибка и БД не открывается.. Код: Faled to open Recordset: Connection1.RecordSet1 А если полностью открывать Connection1 командой DBOpen(«Connection1»), а в RecordSet1 поставить галочку «открывать при подключении», то все нормально открывается. |
В начало |
|
AndyRay |
Заголовок сообщения: Re: Работа с SQL
|
|
Миханик писал(а): Олег AndyRay И еще впорос, который меня уже давно мучает и я всё никак не разберусь: Если я создаю Connection и добавляю RecordSet, то потом при открытии командой DBOpen(«Connection1.RecordSet1») появляется ошибка и БД не открывается.. Код: Faled to open Recordset: Connection1.RecordSet1 А если полностью открывать Connection1 командой DBOpen(«Connection1»), а в RecordSet1 поставить галочку «открывать при подключении», то все нормально открывается. На вскидку сложно сказать…Можно увидеть параметры, с которыми создан рекордсет? |
В начало |
|
Миханик |
Заголовок сообщения: Re: Работа с SQL
|
|
вот действующий RecordSet и не важно что выбирать в качестве источника Table Name или SQL Text:
У вас нет необходимых прав для просмотра вложений в этом сообщении. |
В начало |
|
AndyRay |
Заголовок сообщения: Re: Работа с SQL
|
|
Из практики ошибка Код: Execution of function: DBOpen Failed ! может возникать при недоступности источника данных(изменилось названиеструктура таблицы, с которой связан рекордсет к примеру). Так же перед изменением источника данных рекордсета командой Код: call DBExecute( «Connection1.Procedures», «Source», SQL ) рекордсет необходимо закрыть. |
В начало |
|
Даниил |
Заголовок сообщения: Re: Работа с SQL
|
|
Сделал Recordset c SQL текстом такого содержания: SELECT * FROM tect where KOD=324542 При открытие Recordset, все отлично он связывается с базой данных и выводит нужную строчку, а если меняю содержимое Recordset: SELECT * FROM tect А скриптом пытаюсь задать запрос к базе данных: DBClose( «Connection2.Recordset1» ) Выдает ошибки: Может ли на это влиять что версия CX-Surervisor Trial? |
В начало |
|
olegzh |
Заголовок сообщения: Re: Работа с SQL
|
|
а может сначала надо открыть (open) соединение, а потом вызвать (execute) запрос? |
В начало |
|
Даниил |
Заголовок сообщения: Re: Работа с SQL
|
|
Все спасибо разобрался, причина была в том, что переменная SQL = «SELECT * FROM tect where KOD=324542 « была не текстового формата, я видимо не заметил этого когда выбирал ее. |
В начало |
|
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