Ошибка синтаксиса в инструкции update access

duh_si

569 / 169 / 22

Регистрация: 18.10.2012

Сообщений: 912

1

11.07.2014, 10:50. Показов 1437. Ответов 14

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

День добрый.
ни как не могу понять где ошибка в запросе

Visual Basic
1
2
CurrentProject.Connection.Execute "UPDATE ÂÇàêàçå SET [Ïðîäóêò] = " & ProduktVr & ", [Êîëè÷åñòâî] = " & KolichestvoVr & ", [ÖåíàÇàØò]=" & CenaZaShtVr & ", " _
   & "[Ï6]=" & P6Vr & ", [Çàêàç]=" & ZakazVr & " WHERE Çàêàç =" & NomVSpiskeZak & ""

Пишет: Ошибка синтаксиса в инструкции UPDATE

Подскажите пожалуйста в чем причина…



0



Эксперт MS Access

26799 / 14478 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

11.07.2014, 11:24

2

Самая вероятная причина это пустое (NULL) значение в одной из числовых переменных. Тогда собранная строка имеет знак равенства за которым следует запятая. Конечно, это ошибка.
Другой возможный вариант, тоже очень частый — какие-то переменные имеют текстовый тип и должны окаймляться апострофами. Иначе компилятор запросов воспринимает их как непонятный объект и выходит на ошибку
Легко проверить: надо всего лишь собранную строку распечатать (Debug.Print) и поместить как SQL-выражение к конструкторе запросов. Там ошибка видна точнее.



1



569 / 169 / 22

Регистрация: 18.10.2012

Сообщений: 912

11.07.2014, 11:29

 [ТС]

3

mobile, тоже очень частый — какие-то переменные имеют текстовый тип и должны окаймляться апострофами.

с этим уже столкнулся, это поправил все

mobile, причина это пустое (NULL)

вы скорее всего правы в этом, подскажите как это можно обработать ?



0



mobile

Эксперт MS Access

26799 / 14478 / 3192

Регистрация: 28.04.2012

Сообщений: 15,782

11.07.2014, 11:32

4

Лучший ответ Сообщение было отмечено duh_si как решение

Решение

Цитата
Сообщение от duh_si
Посмотреть сообщение

как это можно обработать ?

Пример для поля Количество

SQL
1
[Количество] = " & Nz(KolichestvoVr, "NULL")

Такая запись, при пустом значении запишет NULL в собранное SQL-выражение.



1



duh_si

569 / 169 / 22

Регистрация: 18.10.2012

Сообщений: 912

11.07.2014, 11:33

 [ТС]

5

вот так примерно все выглядит

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Set StrVzakazeVr = CurrentDb.OpenRecordset("SELECT Продукт, Количество, ЦенаЗаШт, ТипЦены, " _
          & "Дополнительно, П1, П2, П3, П4, П5, " _
          & "П6, Заказ " _
          & "FROM ВЗаказеВременная WHERE Заказ =" & NomVSpiskeZak)
          
    ProduktVr = StrVzakazeVr![Продукт]
    KolichestvoVr = StrVzakazeVr![Количество]
    CenaZaShtVr = StrVzakazeVr![Ценазашт]
    TipCenyVr = StrVzakazeVr![Типцены]
    DopolnitelnoVr = StrVzakazeVr![Дополнительно]
    P1Vr = StrVzakazeVr![П1]
    P2Vr = StrVzakazeVr![П2]
    P3Vr = StrVzakazeVr![П3]
    P4Vr = StrVzakazeVr![П4]
    P5Vr = StrVzakazeVr![П5]
    P6Vr = StrVzakazeVr![П6]
    ZakazVr = StrVzakazeVr![Заказ]
    
    CurrentProject.Connection.Execute "UPDATE ВЗаказе SET [Продукт] = " & ProduktVr & ", [Количество] = " & KolichestvoVr & ", " _
    & "[ЦенаЗаШт]=" & CenaZaShtVr & ", [Дополнительно]='" & DopolnitelnoVr & "', " _
    & "[П1]=" & P1Vr & ", WHERE Заказ = " & NomVSpiskeZak & ""



0



1266 / 448 / 129

Регистрация: 21.03.2013

Сообщений: 1,210

11.07.2014, 12:10

6

Цитата
Сообщение от mobile
Посмотреть сообщение

надо всего лишь собранную строку распечатать (Debug.Print)

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



0



shanemac51

Модератор

Эксперт MS Access

11534 / 4743 / 765

Регистрация: 07.08.2010

Сообщений: 13,793

Записей в блоге: 4

11.07.2014, 12:11

7

а должен выглядеть примерно так

Visual Basic
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
Sub www140710()
Dim s1, NomVSpiskeZak
Dim StrVzakazeVr As DAO.Recordset
NomVSpiskeZak = 1
 
s1 = ""
s1 = s1 & "SELECT Продукт, Количество, ЦенаЗаШт, ТипЦены, "
s1 = s1 & "Дополнительно, П1, П2, П3, П4, П5, П6, Заказ"
s1 = s1 & " FROM ВЗаказеВременная WHERE Заказ =" & NomVSpiskeZak
Debug.Print s1
Set StrVzakazeVr = CurrentDb.OpenRecordset(s1)
          
    
''    TipCenyVr = StrVzakazeVr![Типцены]
 
    s1 = ""
    s1 = s1 & "UPDATE ВЗаказе SET"
    s1 = s1 & " [Продукт] = " & StrVzakazeVr![Продукт]
    s1 = s1 & ", [Количество] = " & StrVzakazeVr![Количество]
    s1 = s1 & ", [ЦенаЗаШт]=" & StrVzakazeVr![Ценазашт]
    s1 = s1 & ", [Дополнительно]='" & Nz(StrVzakazeVr![Дополнительно], "0") & "'"
    s1 = s1 & ", [П1]=" & Nz(StrVzakazeVr![П1], 0)
    s1 = s1 & ", WHERE Заказ = " & NomVSpiskeZak
    Debug.Print s1
    CurrentProject.Connection.Execute s1
 
End Sub

хотя будет ерунда, если данного номера нет или их несколько



2



8815 / 5742 / 581

Регистрация: 27.03.2013

Сообщений: 19,279

11.07.2014, 14:40

8

Возможно вопрос по теме.
Нечаянно навел курсор на название данной темы и задержал малость перед тем как просмотреть ее, всплыло нечто с непонятными иероглифами.
Может в этом скрыта ощибочка?
См. рисунок и стрелки.
Или это только у меня такие выкрутасы?

Миниатюры

Ошибка в инструкции Update
 



0



8815 / 5742 / 581

Регистрация: 27.03.2013

Сообщений: 19,279

11.07.2014, 15:13

9

На все другие ремы навожу, такого нет, а у вас не пропадает.
Может чего поломалось и ВСЁ в новую БД переместить, тогда заработает как надо, а то Аксик может в языках запутался.

Добавлено через 28 минут
Не поленился и по нескольким разделам форума пробежался, наводил на все названия тем, ни где подобного не нашел, а в вашей теме какая то арабская или еще какая азбука так и осталась, я не спец конечно, но возможно предположить. что сам офис полетел. Пишешь визуально как бы правильно. а на програмном уровне ошибочки могут выскакивать.
Где то читал о таком, или говорил кто то, думаю нельзя исключать и таколй возможности.



0



duh_si

569 / 169 / 22

Регистрация: 18.10.2012

Сообщений: 912

15.07.2014, 12:29

 [ТС]

10

подскажите как можно обработать переменные в которых дата,
допустим не ввели ни какую дату в поле, но сохранить запись нужно с этими пустыми полями

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Set StrVr = CurrentDb.OpenRecordset("SELECT Äàòà, Ïîñòàâùèê, Ñòàòóñ, Íà÷àëîÏðîèçâîäñòâà, " _
          & "Îêîí÷àíèåÏðîèçâîäñòâà, Íà÷àëîÄîñòàâêè, Îêîí÷àíèåÄîñòàâêè, Ïðîåêò, Ïîäïðîåêò, Íà÷àëîÏðîèçâîäñòâàÏëàí, " _
          & "Îêîí÷àíèåÏðîèçâîäñòâàÏëàí, Íà÷àëîÄîñòàâêèÏëàí, Îêîí÷àíèåÄîñòàâêèÏëàí, ÍîìåðÑ÷åòà, ÄàòàÑ÷åòåà, ÑòàòóñÏÔ, " _
          & "ÑëóæåáêàÄàòà, Ñðîê, Êà÷åñòâî, Öåíà " _
          & "FROM ÂðåìåííîåÑîõðàíåíèåÇàêàçà WHERE Çàêàç =" & NomVSpiskeZak)
 
    NachProizVr = Format(StrVr![Íà÷àëîïðîèçâîäñòâà], "dd.mm.yyyy")
    OkonProizVr = Format(StrVr![Îêîí÷àíèåÏðîèçâîäñòâà], "dd.mm.yyyy")
    NachDostVr = Format(StrVr![Íà÷àëîÄîñòàâêè], "dd.mm.yyyy")
    
CurrentProject.Connection.Execute "UPDATE Çàêàç SET [Íà÷àëîÏðîèçâîäñòâà]='" & NachProizVr & "', [Îêîí÷àíèåÏðîèçâîäñòâà]='" & OkonProizVr & "', " _
& "[Íà÷àëîÄîñòàâêè]='" & NachDostVr & "' " _
      & "WHERE Íîìåð =" & NomVSpiskeZak & ""

ругается на запрос update
Пишет:

Несоответствие типов данных в выражении условия отбора.



0



shanemac51

Модератор

Эксперт MS Access

11534 / 4743 / 765

Регистрация: 07.08.2010

Сообщений: 13,793

Записей в блоге: 4

15.07.2014, 14:50

11

но сохранить запись нужно с этими пустыми полями

сие не заметила, но и без этого орехов много

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Dim s1
Dim strVr As DAO.Recordset
s1 = ""
s1 = s1 & "SELECT Дата, Поставщик, Статус, НачалоПроизводства, "
s1 = s1 & " ОкончаниеПроизводства, НачалоДоставки, ОкончаниеДоставки, Проект,"
s1 = s1 & " Подпроект, НачалоПроизводстваПлан, "
s1 = s1 & " ОкончаниеПроизводстваПлан, НачалоДоставкиПлан, ОкончаниеДоставкиПлан,"
s1 = s1 & " НомерСчета, ДатаСчетеа, СтатусПФ, "
s1 = s1 & " СлужебкаДата, Срок, Качество, Цена "
s1 = s1 & " FROM ВременноеСохранениеЗаказа WHERE Заказ =" & NomVSpiskeZak
 
Set strVr = CurrentDb.OpenRecordset(s1)
 NachProizVr = Format(strVr![Началопроизводства], "mm\/dd\/yyyy")
 OkonProizVr = Format(strVr![ОкончаниеПроизводства], "mm\/dd\/yyyy")
 NachDostVr = Format(strVr![НачалоДоставки], "mm\/dd\/yyyy")
   
s1 = ""
s1 = s1 & " UPDATE Заказ SET "
s1 = s1 & " [НачалоПроизводства]=#" & NachProizVr & "#,"
s1 = s1 & " [ОкончаниеПроизводства]=#" & OkonProizVr & "#, "
s1 = s1 & " [НачалоДоставки]=#" & NachDostVr & "# "
s1 = s1 & " WHERE Номер =" & NomVSpiskeZak & ""
 CurrentProject.Connection.Execute s1



0



569 / 169 / 22

Регистрация: 18.10.2012

Сообщений: 912

15.07.2014, 15:23

 [ТС]

12

shanemac51, использую ваш код,
получаю такую ошибку
на 23 строке вашего кода

Миниатюры

Ошибка в инструкции Update
 



0



Модератор

Эксперт MS Access

11534 / 4743 / 765

Регистрация: 07.08.2010

Сообщений: 13,793

Записей в блоге: 4

15.07.2014, 15:38

13

у меня вашей базы нет —проверить не смогла (а2007)

может дело в том, что у вас нет какой-то даты



0



569 / 169 / 22

Регистрация: 18.10.2012

Сообщений: 912

15.07.2014, 15:57

 [ТС]

14

shanemac51, может дело в том, что у вас нет какой-то даты

в том то и дело, поля с датами остаются пустыми ( эти поля пользователю

не обязательно

сразу нужно заполнять, как нужно будет он заполнит ) , соответственно и в переменных пусто, а когда UPDATE делаю, код ругается что в переменных нет ничего, а мне нужно чтобы он не обращал на это внимание, просто тупо перезаписывал пустоту



0



shanemac51

Модератор

Эксперт MS Access

11534 / 4743 / 765

Регистрация: 07.08.2010

Сообщений: 13,793

Записей в блоге: 4

15.07.2014, 16:42

15

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

Visual Basic
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
Set strVr = CurrentDb.OpenRecordset(s1)
 
 
 
 s2 = ""
 
 If IsNull(strVr![Началопроизводства]) = False Then
 s2 = s2 & " [НачалоПроизводства]=#" & Format(strVr![Началопроизводства], "mm\/dd\/yyyy") & "#,"
End If
 
If IsNull(strVr![ОкончаниеПроизводства]) = False Then
s2 = s2 & " [ОкончаниеПроизводства]=#" & Format(strVr![ОкончаниеПроизводства], "mm\/dd\/yyyy") & "#,"
End If
 
If IsNull(strVr![НачалоДоставки]) = False Then
s2 = s2 & " [НачалоДоставки]=#" & Format(strVr![НачалоДоставки], "mm\/dd\/yyyy") & "#"
End If
 j2 = Len(s2)
 If j2 > 10 Then
 If Mid(s2, j2, 1) = "," Then
 s2 = Mid(s2, 1, j2 - 1)
 End If
 s1 = ""
s1 = s1 & " UPDATE Заказ SET "
 
s1 = s1 & s2
'Номер
s1 = s1 & " WHERE номер =" & NomVSpiskeZak
Debug.Print s1
DoCmd.RunSQL s1
End If
' CurrentProject.Connection.Execute s1



1



I’m getting a syntax error in this SQL, and can’t seem to figure out why?

The SQL UPDATE returns this on the error:

UPDATE Tankstationer 
SET Long='12.5308724', Lat='55.6788735' 
WHERE Id = 2;

Here’s my code:

foreach (var row in reader)
{
   var id = reader.GetInt32(0);
   var adress = reader.GetString(1);
   var zip = reader.GetDouble(2);
   var city = reader.GetString(3);
   var adressToParse = adress + " " + zip + " " + city;

   GMapGeocoder.Containers.Results result = Util.Geocode(adressToParse, key);
   foreach (GMapGeocoder.Containers.USAddress USAdress in result.Addresses )
   {
      var google_long = convertNumberToDottedGoogleMapsValid(USAdress.Coordinates.Longitude);
      var google_lat = convertNumberToDottedGoogleMapsValid(USAdress.Coordinates.Latitude);
      Message.Text = "Lattitude: " + google_long + System.Environment.NewLine;
      Message.Text = "Longitude: " + google_lat + System.Environment.NewLine;
      string updatesql = "UPDATE Tankstationer SET Long='" +google_long+ "', Lat='" +google_lat+ "' WHERE Id = " +id+"";
      OleDbCommand update = new OleDbCommand();
      update.CommandText = updatesql;
      update.Connection = conn;
      reader = update.ExecuteReader();
      Message.Text = "Done";
   }
}

marc_s's user avatar

marc_s

737k176 gold badges1337 silver badges1463 bronze badges

asked Jan 13, 2011 at 9:53

nickycdk's user avatar

7

The error is probably because you are executing a reader, but your query does not return anything. Call update.ExecuteNonQuery() instead.

answered Jan 13, 2011 at 9:58

cjk's user avatar

cjkcjk

45.9k9 gold badges81 silver badges112 bronze badges

0

«Long» is a reserved word in Access. If you can’t change the schema to call that column something else, put it in brackets:

UPDATE Tankstationer
  SET [Long]='12.5308724', Lat='55.6788735'
  WHERE Id = 2; 

answered Jan 13, 2011 at 18:58

RolandTumble's user avatar

RolandTumbleRolandTumble

4,6433 gold badges32 silver badges37 bronze badges

try using update.ExecuteNonQuery() instead of reader.

Saw other comments too late.

I don’t use access often, but mine it’s using <«> for text delimiter, not <‘>

answered Jan 13, 2011 at 10:00

mslliviu's user avatar

mslliviumslliviu

1,0982 gold badges12 silver badges30 bronze badges

2

Try:

«id» is being set to Int32 (var id = reader.GetInt32(0);) but you are concatenating it to a string (WHERE Id = » +id+»»;). Make sure that id is cast as a string value and not an int.

answered Jan 13, 2011 at 10:14

Darryl Peterson's user avatar

Darryl PetersonDarryl Peterson

2,2501 gold badge16 silver badges13 bronze badges

1

  • Remove From My Forums
  • Question

  • In this code I use an Access database…
    OleDbDataReader rdr = acmd.ExecuteReader();

    rdr.Close();
    The code works fine up to this point. I successfully read from the Clients and WPClients tables in the database.
    Right after that I set a different command…
    q = «Update Clients Set Found = ‘200550’ Where ID = ‘100020’»;
    acmd.CommandText = q;
    acmd.ExecuteNonQuery();
    This throws «Syntax error in UPDATE statement.»
    The connection to the Access database is still open.

    However, when I open the .mdb file in Access and paste the exact same command into the SQL view of a query, it runs fine.

    Why can’t I run the update statement from C#?

Answers

  • Have you tried to ‘bracket’ the fields?

    «Update [Clients] Set [Found]=’200550′ where [ID]=’100020′;»

    If that doesn’t work, you can also parameterize your sql:

    q = «Update [Clients] set [Found]=? where [ID]=?);

    OleDbParameters[] parameters =
    {
      new OleDbParameter(«?», «2005500»),
      new OleDbParameter(«?», «100020»)
    };

    acmd.CommandText = q;
    acmd.Parameters.AddRange(parameters);

    I like to parameterize any strings that I use in my queries.  This ensures that they are handled correctly without having to be parsed.


    public enum Answers
    {
    Everything = 0x2A
    }

    • Marked as answer by

      Tuesday, November 3, 2009 6:07 PM

I have a datagridview. I fatch data from database and show in this gridview. But when I try to update it by clicking a button it shows an error.

            try
            {
                string update = "update Tank_Head set Item_Code='?', Opening_Bal='?', Tank_Description='?', where Tank_Unit='?' and companyID='?'";
                OleDbCommand cmd = new OleDbCommand(update, con);
                cmd.Parameters.AddWithValue("@Item_Code", cbItemEdit.Text);
                cmd.Parameters.AddWithValue("@Opening_Bal", txtOpeningBalanceEdit.Text);
                cmd.Parameters.AddWithValue("@Tank_Description", txtTankDesEdit.Text);
                cmd.Parameters.AddWithValue("@Tank_Unit", txtTankUnitEdit.Text);
                cmd.Parameters.AddWithValue("@companyID", label1.Text);
                i = cmd.ExecuteNonQuery();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
            finally
            {
                con.Close();
                if (i != 0)
                {
                    pnlView.Visible = true;
                    pnlEdit.Visible = false;
                }
            }

asked Sep 11, 2013 at 11:30

Animesh Ghosh's user avatar

Animesh GhoshAnimesh Ghosh

3318 gold badges17 silver badges28 bronze badges

2

You’ve got a stray comma in there:

update Tank_Head set Item_Code='?', Opening_Bal='?', Tank_Description='?', <<< where Tank_Unit='?' and companyID='?'

Remove that and it should work fine:

update Tank_Head set Item_Code='?', Opening_Bal='?', Tank_Description='?' where Tank_Unit='?' and companyID='?'

answered Sep 11, 2013 at 11:33

CodingIntrigue's user avatar

CodingIntrigueCodingIntrigue

76.5k30 gold badges171 silver badges176 bronze badges

There is extra , in your query before where

replace your query like this

string update = "update Tank_Head set Item_Code='?', Opening_Bal='?', Tank_Description='?'  where Tank_Unit='?' and companyID='?'";

answered Sep 11, 2013 at 11:33

Microsoft DN's user avatar

Microsoft DNMicrosoft DN

9,78610 gold badges52 silver badges71 bronze badges

You have a comma after the last field being updated causing error. Try changing the statement to

string update = "update Tank_Head set Item_Code='?', Opening_Bal='?', Tank_Description='?' where Tank_Unit='?' and companyID='?'";

answered Sep 11, 2013 at 11:34

shree.pat18's user avatar

Logo
MurCode

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

Pasha_Sem

Дата: 05.02.2007 16:05:46

Все привет !
Пытаюсь в таблицу Access добавить значение! выдает сообщение
Ошибка синтаксиса в инструкции UPDATE
Кто сталкивался подскажите где ошибка?
ataSet myDataSet = new DataSet();
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter();

private void button3_Click(object sender, EventArgs e)
{
string connectionString = «Provider=Microsoft.Jet.OLEDB.4.0;Data Source=BugTypes.MDB»;
string select = «UPDATE Categories» + » SET Category Name = ‘HI’ » + » WHERE Category ID = ‘3’»;
OleDbConnection testConnection = new OleDbConnection(connectionString);
testConnection.Open();
// OleDbCommand testCommand = new OleDbCommand(«SELECT * FROM Categories», testConnection);
OleDbCommand testCommand = new OleDbCommand(select, testConnection);
int rowsReturn = testCommand.ExecuteNonQuery();
testConnection.Close();
}
}
}

Спасибо!

HandKot

Дата: 05.02.2007 16:48:41

автор
SET Category Name = ‘HI’ » + » WHERE Category ID = ‘3’»

если нет символа подчеркивания, тогда названия полей надо взять в квадратные скобки

SET [Category Name] = 'HI' " + " WHERE [Category ID] = '3'"

вроде так

I Have Nine Lives You Have One Only
THINK!

Pasha_Sem

Дата: 05.02.2007 17:55:44

Исправленный синтаксис теперь верен
после таких изминений
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
// The insertSQL string contains a SQL statement that
// inserts a new row in the source table.
OleDbCommand command = new OleDbCommand(«UPDATE Categories SET [Category Name] = ‘Привет’ WHERE [Category ID] = 1», connection);

// Set the Connection to the new OleDbConnection.
command.Connection = connection;

// Open the connection and execute the insert command.
try
{
connection.Open();
command.ExecuteNonQuery();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

но появляеться исключение
Отсутствует значениедля одного или нескольких требуемых параметров
Таже истормя при оригенальном коде! что и в первом примере

HandKot

Дата: 06.02.2007 09:08:55

автор
но появляеться исключение
Отсутствует значениедля одного или нескольких требуемых параметров
Таже истормя при оригенальном коде! что и в первом примере

а вы запустите запрос в самом Access, он выполниться?

I Have Nine Lives You Have One Only
THINK!


Форум программистов Vingrad

Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> Ошибка синтаксиса в инструкции Update 

:(

   

Опции темы

b3ndr
Дата 12.3.2009, 01:40 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 4
Регистрация: 11.3.2009

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

База MS Access. Есть код.

Код

                  vsWord wd = doc.Next();
                    //Получили слово, надо лезть в БД
                    OleDbDataAdapter thisAdapter = new OleDbDataAdapter("SELECT * FROM Main WHERE WORD='"+wd.ToString()+"'", thisConnection);

                                        OleDbCommandBuilder thisBuilder = new OleDbCommandBuilder(thisAdapter);
                    DataSet thisDataSet = new DataSet();
                    thisAdapter.Fill(thisDataSet,"Main");

                    if (thisDataSet.Tables["Main"].Rows.Count>0)
                    {
                        //есть такое
                        int a = (int) thisDataSet.Tables["Main"].Rows[0]["COUNT"];
                        a++;
                        thisDataSet.Tables["Main"].Rows[0]["COUNT"] = a;
                        thisAdapter.Update(thisDataSet, "Main");
// Здесь вызывает ошибку "Ошибка синтаксиса в инструкции UPDATE"
                    }
                    else 
                    {
                        //нет такого
                        thisDataSet.Tables["Main"].Rows.Add("aca",3);
                        //thisDataSet.Tables["Main"].Rows[thisDataSet.Tables["Main"].Rows.Count-1]["WORD"] = wd.ToString();
                        thisAdapter.Update(thisDataSet,"Main");
// Здесь вызывает ошибку "Ошибка синтаксиса в инструкции INSERT"
                    }

Почему могут возникать эти ошибки?

PM MAIL   Вверх
emmanuil
Дата 13.3.2009, 08:23 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Участник
Сообщений: 380
Регистрация: 9.1.2007

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

Код

OleDbCommandBuilder thisBuilder = new OleDbCommandBuilder(thisAdapter);
thisAdapter.UpdateCommand = thisBuilder.GetUpdateCommand();
thisAdapter.InsertCommand = thisBuilder.GetInsertCommand();

PM MAIL   Вверх
corpse56
Дата 26.3.2009, 17:38 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.3.2009

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

та же самая проблема. причем идентичный код с компонентами для sql работает. а для Access не работает. emmanuil, Ваше решение не помогло…

PM MAIL   Вверх
emmanuil
Дата 26.3.2009, 18:20 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Участник
Сообщений: 380
Регистрация: 9.1.2007

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

corpse56, покажите полный код.
Предложенное решение, думаю, помогло в том примере, у Вас могут быть ошибки по другим причинам.
Кстати, b3ndr, не хорошо оставлять свой собственный вопрос без внимания!  smile 

PM MAIL   Вверх
corpse56
Дата 26.3.2009, 18:46 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.3.2009

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

Разобрался! в запросах OLE имена таблиц ОБЯЗАТЕЛЬНО должны быть в квадратных скобках. OleDbCommandBuilder генерирует команды правильно, вот только квадратные скобки не ставит около имени таблицы.я написал свою UpdateCommand и все заработало.
вкратце это выглядит вот так:

Код

            OleDbDataAdapter Ole = new OleDbDataAdapter();
            Ole.SelectCommand = new OleDbCommand();
            Ole.SelectCommand.Connection = OleCon;
            Ole.SelectCommand.Connection.Open();
            Ole.SelectCommand.CommandText = "SELECT * FROM [User]";
            Ole.UpdateCommand = new OleDbCommand("update [User] set NameUser = '111111' where IDUser =3", OleCon);
            Ole.UpdateCommand.ExecuteNonQuery();

успехов!

PM MAIL   Вверх
Rififi
Дата 26.3.2009, 20:52 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
***

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

Репутация: нет
Всего: 36

corpse56
имена таблиц ОБЯЗАТЕЛЬНО должны быть в квадратных скобках.
ничего подобного.
просто у тебя кривая таблица User, которая совпадает с зарезервированным словом

PM MAIL   Вверх
corpse56
Дата 27.3.2009, 10:33 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.3.2009

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

и вправду!! щас пробовал на таблице Penalty — сработало без скобок. а ведь User выбирал с учетом того чтобы именно попробовать на другой таблице. я тогда подумал вдруг в таблице что-то не так. и попал опять на зарезервированное слово.
скажите, а слово Main тоже зарезервировано? изначально мне нужна таблица Main. и где посмотреть список всех зарезервированных слов для Access? ну и для MS SQL раз уж на то пошло?

Добавлено через 12 минут и 46 секунд
вот еще поправочка: поле например не может быть названо Password. это я так понял тоже зарезервированное слово. назвать его можно так, но вот потом синтаксические ошибки в запросах. изменил одну букву в названии этого поля — и все заработало. всем спасибо!

PM MAIL   Вверх
Rififi
Дата 27.3.2009, 11:25 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
***

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

Репутация: нет
Всего: 36

corpse56
где посмотреть список всех зарезервированных слов для Access? 
microsoft access reserved keywords

PM MAIL   Вверх
corpse56
Дата 27.3.2009, 11:37 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Новичок

Профиль
Группа: Участник
Сообщений: 4
Регистрация: 26.3.2009

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

спасибо. посмотрел. но в списке не оказалось слова Password…
а Main кстати незарезервированное. у меня не работало из-за Password. почему с ним не работает, но гео нет в списке зарезервированных? у меня стоит аксесс 2002 сп3. юзаю VS 2005 c#

PM MAIL   Вверх



















Ответ в темуСоздание новой темы
Создание опроса
Прежде чем создать тему, посмотрите сюда:

stab

mr.DUDA

Exception

  • Что же такое .NET? Краткое описание, изучаем.
  • Какой язык программирования выбрать? выбираем.
  • C#. С чего начать? начинаем.
  • Обзор новых возможностей VS 2005, интересуемся.
  • Защита исходного кода .NET приложений, защищаем.
  • Литература по .NET, обращаемся.
  • Вопросы по .NET можно задать также в разделах: VB.NET, Delphi.NET.

  • FAQ раздела, ищем здесь.
  • Архиполезные ссылки: www.connectionstrings.com, www.pinvoke.net, www.codeproject.com

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс «транслит» если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »

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

Это тоже интересно:

  • Очки виртуальной реальности vr shinecon с наушниками инструкция
  • Ошейник килтикс для собак инструкция
  • Ошибка синтаксиса в инструкции create table access
  • Ошейник инспектор для кошек инструкция
  • Ошибка синтаксиса в инструкции transform access

  • Подписаться
    Уведомить о
    guest

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