Инструкция insert into содержит неизвестное имя поля access

Маринчик

0 / 0 / 3

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

Сообщений: 150

1

Ошибки при заполнении полей запросами

02.05.2015, 18:42. Показов 4940. Ответов 3

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


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

при помощи запросов sql , прикрепленных в файле — создала таблицы..
начала их заполнять, опять-таки при помощи запросов и начали лезть ошибки…
1-я ошибка:
пишу запрос на заполнение бщих данных для таблицы тКвартири из таблицы тБудинки:

SQL
1
2
3
INSERT INTO тКвартири( [№квартири], [код_будинку])
SELECT * 
FROM тБудинки

выбивает ошибку «Инструкция INSERT INTO содержит неизвестное имя поля №будинку.Проверьте что имя задано без ошибок, и повторите операцию»
я чего-то в запросе не дописала? как исправить эту ошибку???

2-я ошибка

таблицу тТарифи заполняла ручками.. теперь нужно чтоб общие данные по последнему тарифу в этой таблице переходили в таблицу тОплата_план..
Запрос на последний тариф с помощью функции max выглядит так:

SQL
1
2
3
SELECT Дата_встановлення, Тарифік1людини, код_тарифу
FROM тТарифи
WHERE Дата_встановлення = (SELECT MAX (Дата_встановлення) FROM( тТарифи ));

как отдельный запрос он работает, но как я понимаю — что из этого запроса значение для код_тарифу должно копироваться в таблицу тОплата_план, т.е. я создаю следующий запрос:

SQL
1
2
3
4
5
6
7
8
INSERT INTO тОплата_план(код_тарифу) 
SELECT код_тарифу
FROM тТарифи
WHERE 
(SELECT  код_тарифу
FROM тТарифи
WHERE Дата_встановлення = (SELECT MAX (Дата_встановлення) FROM( тТарифи ));
)

выбивает ошибку, что на картинке

Миниатюры

Ошибки при заполнении полей  запросами
 

Вложения

Тип файла: zip кр.zip (32.0 Кб, 2 просмотров)



0



mobile

Эксперт MS Access

26782 / 14461 / 3192

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

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

02.05.2015, 20:33

2

Цитата
Сообщение от Маринчик
Посмотреть сообщение

1-я ошибка:

В запросе на вставку должно быть соответствие количества полей. Вы же в селекте пишете звездочку, т.е. все поля, а в таблице тБудинки 3 поля. Именно об этом акс Вас информирует.

Цитата
Сообщение от Маринчик
Посмотреть сообщение

2-я ошибка

Во-первых пара ошибок в синтаксисе запроса. Предложение Where должно быть таким (логику не знаю, сужу только по синтаксису)

SQL
1
2
3
4
WHERE код_тарифу IN 
(SELECT  код_тарифу
FROM тТарифи
WHERE Дата_встановлення = (SELECT MAX (Дата_встановлення) FROM  тТарифи ))

И кроме того, был символ точка с запятой перед заверщающей скобкой. А точка с запятой это символ конца запроса.

Ну и самое важное. В таблице тОплата_план есть 3 обязательных поля: код_оплати_план (ключ), код_тарифу и код_квартири. Попытка создать запись, заполнив только одно из них, приведет к ошибке. Что и случилось



0



Маринчик

0 / 0 / 3

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

Сообщений: 150

03.05.2015, 23:58

 [ТС]

3

ну не понимаю я сама что не так
тоска блин…ну вроде должно быть правильно.. почему так выбивает

по первой ошибке моей исправила запрос на следущий

SQL
1
2
3
INSERT INTO тКвартири( [№квартири], [код_будинку])
SELECT [№квартири], [код_будинку]
FROM тБудинки

а выбивает сообщение с картинки

что же не так???????? я не понимаю сама…

Миниатюры

Ошибки при заполнении полей  запросами
 



0



Эксперт MS Access

26782 / 14461 / 3192

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

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

04.05.2015, 01:52

4

Цитата
Сообщение от Маринчик
Посмотреть сообщение

выбивает сообщение с картинки

Скорее всего причина в том, что в нескольких записях (судя по картинке в 2) поля [№квартири] или [код_будинку] в таблице тБудинки не заполнены. Пустые. А они обязательные. Вот программа об этом и сообщает



0



I’ve been asked to do some updates on an Access 2007 VBA application. My experience is mostly with Excel VBA, not much with Access.

In one place, we’re adding some additional fields. One of the tables is exported to an Excel workbook like this:

DoCmd.TransferText acExportDelim, «(text file specification)», «(source table name)», (path to CSV file to be created), True

After adding the new fields to the source table, I get the error:

«The INSERT INTO statement contains the following unknown field name: ‘(field name)’. Make sure you have typed the name correctly, and try the operation again.»

After reading what I could find on this, I understand that the problem is that the «text file specification» does not have the new fields. And further, that I can’t edit the text file specification but instead must create a new one.

Okay, I can do that. But how do I know everything the previous text file specification was doing? I can see the result, but that doesn’t necessarily tell me everything it did.

Is it possible to see, even if read only, that text file specification? If I go (in Access 2007) to External Data tab > Export section > Saved Exports, and go to the Saved Exports tab, I see a single item there that may be the one, though it doesn’t seem to have the same name there as what I see in the DoCmd.TransferText line. However I don’t see any way of viewing what it does; just a name for it, a description (which is blank), and a path (which is not currently valid).

Is there a better way than playing guessing games about what the old text file specification does?

Any suggestions?

Thanks,

Greg

Привет всем.

Есть БД MS Access с таблицей Table1.
Поля:

Account (строковая переменная)
Password (строковая переменная)
ID (счетчик)
Comment (строковая переменная)

В BC++ Builder (v6.0 Enterprise) добавил компоненту TADOQuery и В ее свойство SQL записал запрос следующего вида:

INSERT INTO Table1 (Account, Password, Comment) VALUES (1,’11’,111)

Прога запускается и при срабатывании этого запроса выдается ошибка:
«Project Proj1.exe rised exaption class EOleException with message ‘Ошибка синтаксиса в инструкции INSERT INTO’ «.
Запись не добавляется. Насколько я понял он ругается на поле Password (кажется он воспринимает его как какое-то служебное слово, инструкция …).
Поменять его название нельзя — этой таблицей пользуется еще другая прога.

Пробовал по другому:
INSERT INTO Table1 (Account, Table1.Password, Comment) VALUES (1,’11’,111)
тоже не работает, говорит, что запрос содержит неизвестное имя поля Table1.Password.

Как сделать так чтоб INSERT INTO нормально добавлял мои записи с заданными мною значениями Password?
Создал в MS SQL Server 2000 такую же таблицу. Через QueryAnalizer запустил такие же запросы — оба нормально добавили новые записи. А вот в BC++ Builder c MS Access БД что-то не получается.

Доброго времени суток, уважаемый all!

есть пустая dbf (без данных — шаблон), содержащая одно поле ‘8000’ типа character(50)

код:

public string[] toDBF(string FileName)
        {
            try {
              string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""+Path.GetDirectoryName(FileName) + "";Extended Properties="dBase IV"";

              System.Data.OleDb.OleDbConnection cn = new OleDbConnection(ConnectionString);
              OleDbCommand ocmd = new OleDbCommand("", cn);
              cn.Open();

              ocmd.CommandText = "insert into [" + Path.GetFileNameWithoutExtension(FileName) + "] ([8000]) values ('asdasdad'));

              ocmd.ExecuteNonQuery();
              cn.Close();
            } catch (Exception err) {
              MessageBox.Show(err.Message);
            }
        }

выдает ошибку на ExecuteNonQuery:
«Инструкция INSERT INTO содержит неизвестное имя поля ‘8000’.
Проверьте, что имя задано без ошибок, и повторите операцию.»

Пробовал ставить имя поле (‘8000’) , (`8000`) не помогает… стоит лишь исправить на [T8000] все проходит на ура..
как только имя поля число сразу падает с ошибкой.. шаблон строго задан начальством, изменить не могу..
пробовал через другие варианты, например черезз OleDbDataAdapter + OleDbCommandBuilder
select из dbf работает нормально, insert нет.
insert сформированный commandbuilder’ом: «insert into table (8000) values (?)» меня совсем не обрадовал.

как быть, подскажите плиз ?

Здравствуйте, S Igor, Вы писали:

SI>Доброго времени суток, уважаемый all!


SI>есть пустая dbf (без данных — шаблон), содержащая одно поле ‘8000’ типа character(50)


SI>код:

SI>

SI>public string[] toDBF(string FileName)
SI>        {
SI>            try {
SI>              string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""+Path.GetDirectoryName(FileName) + "";Extended Properties="dBase IV"";

SI>              System.Data.OleDb.OleDbConnection cn = new OleDbConnection(ConnectionString);
SI>              OleDbCommand ocmd = new OleDbCommand("", cn);
SI>              cn.Open();

SI>              ocmd.CommandText = "insert into [" + Path.GetFileNameWithoutExtension(FileName) + "] ([8000]) values ('asdasdad'));

SI>              ocmd.ExecuteNonQuery();
SI>              cn.Close();
SI>            } catch (Exception err) {
SI>              MessageBox.Show(err.Message);
SI>            }
SI>        }
SI>


SI>выдает ошибку на ExecuteNonQuery:
SI>»Инструкция INSERT INTO содержит неизвестное имя поля ‘8000’.
SI>Проверьте, что имя задано без ошибок, и повторите операцию.»

SI>Пробовал ставить имя поле (‘8000’) , (`8000`) не помогает… стоит лишь исправить на [T8000] все проходит на ура..

SI>как только имя поля число сразу падает с ошибкой.. шаблон строго задан начальством, изменить не могу..
SI>пробовал через другие варианты, например черезз OleDbDataAdapter + OleDbCommandBuilder
SI>select из dbf работает нормально, insert нет.
SI>insert сформированный commandbuilder’ом: «insert into table (8000) values (?)» меня совсем не обрадовал.

SI>как быть, подскажите плиз ?

insert into table  values (?)

????

Здравствуйте, DarkSid, Вы писали:
DS>

DS>insert into table  values (?)
DS>


DS> ????

то же самое

Здравствуйте, S Igor, Вы писали:

SI>Здравствуйте, DarkSid, Вы писали:

DS>>

DS>>insert into table  values (?)
DS>>


DS>> ????

SI>то же самое

Вот тут описан хитрый Insert — может поможет
здесь

Возможно смени OLE DB Provider
здесь

Здравствуйте, DarkSid, Вы писали:

DS>Вот тут описан хитрый Insert — может поможет

DS>здесь

DS>Возможно смени OLE DB Provider

DS>здесь

большое спасибо

Итак, когда я запускал эту программу, я получил эту ошибку, говорящую о том, что «ShopperID» является неизвестным полем, хотя оно указано в моей базе данных в MS Access. Он также вставляет все входные данные, сделанные до возникновения этой ошибки.

Я получил ошибку:

‘Инструкция INSERT INTO содержит следующее неизвестное имя поля: ‘ShopperID’. Убедитесь, что вы правильно ввели имя, и повторите попытку.

Вот мой код:


Imports System.Data.OleDb
Public Class acer
    Private Sub acer_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        conn.Open()
        Dim cmd As New OleDbCommand("Select Stocks from vbProduct where ProdID = @pID ", conn)
        cmd.Parameters.AddWithValue("@pID", OleDbType.VarChar).Value = "P-1001"
        conn.Close()
    End Sub

    Private Sub btnCart_Click(sender As Object, e As EventArgs) Handles btnCart.Click

        Dim sdate As DateTime = Today
        Dim shipdate As DateTime
        shipdate = sdate.AddDays(5)
        shipdate.ToString("mm/dd/yyyy")
        sdate.ToString("mm/dd/yyyy")
        conn.Open()
        Dim cmd As New OleDbCommand("Insert into vbCart(DateTime_Created,DateTime_Checkout,Delivery_Date,ProdID,Cart_ItemsQty,Cart_Items,ShopperID)values
(@created, @checkout, @ship, @pID,@quanti,@items,@UID) ", conn)
        cmd.Parameters.AddWithValue("@created", OleDbType.VarChar).Value = sdate
        cmd.Parameters.AddWithValue("@checkout", OleDbType.VarChar).Value = sdate
        cmd.Parameters.AddWithValue("@ship", OleDbType.VarChar).Value = shipdate
        cmd.Parameters.AddWithValue("@pID", OleDbType.VarChar).Value = "P-1001"
        cmd.Parameters.AddWithValue("@quanti", OleDbType.Integer).Value = nudqty.Text
        cmd.Parameters.AddWithValue("@items", OleDbType.VarChar).Value = "ACER NITRO 5"
        cmd.Parameters.AddWithValue("@UID", OleDbType.VarChar).Value = String.Format("{0}{1}, ", sformat, sID)
        cmd.ExecuteNonQuery()
        TeamAudit("ADD TO CART, ACER NITRO 5, " + String.Format("{0}{1}, ", sformat, sID) + sLast + ", " + sFirst)
        conn.Close()
        Me.Hide()
        example.Show()
    End Sub
End Class

Я уже пытался изменить его значения

1 ответ

Убедитесь, что поля в «INSERT INTO» расположены ТОЧНО в том же порядке, что и поля в базе данных Access. Я думаю, именно поэтому JayV попросил скриншот базы данных. Это укусило меня несколько раз … Удачи!


0

user2807976
26 Ноя 2022 в 23:11

Понравилась статья? Поделить с друзьями:
  • Как закрыть ооо через госуслуги пошаговая инструкция
  • Детские электронные часы тик так инструкция
  • Мануалы по ремонту форд эскейп
  • Акип 2101 руководство по эксплуатации
  • Как открыть инструкцию по qr коду