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

The INSERT INTO statement contains the following unknown field name:

NoName‘. Make sure you have typed the name correctly, and try the
operation again.

That is the error thrown when I try to insert a record into a dbase file (.dbf) from a .Net app I am working on.

I use Oledb connection like this:

OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:UsersDavidDesktopDbase_Files;Extended Properties=dBASE IV;User ID=Admin;Password=");

I had similar issues while selecting. Some columns get returned as ‘NoName‘ but still with data. I simply use the column index number in place of the column name.

Now I need to insert and it has been a block. Same error comes up with say (when you don’t list out the column names):

INSERT INTO [tablename.dbf] VALUES (?, ?, ?);

Sample full code below:

OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:UsersDavidDesktopDbase_Files;Extended Properties=dBASE IV;User ID=Admin;Password=");

connection.Open();

OleDbTransaction trans = connection.BeginTransaction();
OleDbCommand command = new OleDbCommand(@"INSERT INTO [tablename.DBF] 
                                        VALUES
                                        (
                                        ?, ?, ?
                                        );", connection, trans);

command.Parameters.AddWithValue("param1", 7);
command.Parameters.AddWithValue("param2", "RCN");
command.Parameters.AddWithValue("param3", 0);

try
{
    command.ExecuteNonQuery();
    trans.Commit();
}
catch (Exception e)
{
    trans.Rollback();
    throw e;
}
finally
{
    connection.Close();
}

I have seen forums discuss this when it happens in Ms Access. But nothing much so far on dbase. Been thinking it is a driver thing.

The dbase file was created by dbase plus (2007) application.

Маринчик

0 / 0 / 3

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

Сообщений: 150

1

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

02.05.2015, 18:42. Показов 5051. Ответов 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

26788 / 14467 / 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

26788 / 14467 / 3192

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

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

04.05.2015, 01:52

4

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

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

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



0



#ms-access #coldfusion #insert #ms-jet-ace

#ms-access #coldfusion #вставить #ms-jet-ace

Вопрос:

Я использую Coldfusion 9,0,0,251028 в 64-разрядной версии Windows 7 с базой данных Microsoft Access 97.

Когда я запускаю этот запрос:

 <cfquery name="put_in_info" datasource="#db#">

      insert into news

                  (is_current, display, mes_dat,mes_tim,mes_sub,mes_text,scrollshow,exp_dat)

      values

  (1,1, #createodbcdate(now())#, #createodbctime(now())#, '#subject#', '#message#',1, #session.expdate#)

</cfquery>
  

Я получаю эту ошибку:

 Error Executing Database Query.

[Macromedia][SequeLink JDBC Driver][ODBC Socket][Microsoft][ODBC Microsoft Access Driver] The INSERT INTO statement contains the following unknown field name: 'exp_dat'. Make sure you have typed the name correctly, and try the operation again.   The error occurred in H:Inetpubpvalert.comlistserveradmintemplatespost_breaking.cfm: line 26
Called from H:Inetpubpvalert.comlistserveradminnew_process.cfm: line 54
Called from H:Inetpubpvalert.comlistserveradmintemplatespost_breaking.cfm: line 26
Called from H:Inetpubpvalert.comlistserveradminnew_process.cfm: line 54

24 :      (is_current, display, mes_dat,mes_tim,mes_sub,mes_text,scrollshow,exp_dat)

25 :   values

26 :   (1,1, #createodbcdate(now())#, #createodbctime(now())#, '#subject#', '#message#',1, #session.expdate#)

27 :    </cfquery>

28 :

VENDORERRORCODE


  -1507

SQLSTATE


  HYS22

SQL


   insert into news (is_current, display, mes_dat,mes_tim,mes_sub,mes_text,scrollshow,exp_dat) values (1,1, {d '2011-04-11'}, {t '17:49:09'}, 'Test message - please ignore', 'This is a test message, please ignore. ',1, {ts '2011-05-15 00:00:00'})

DATASOURCE


  rpv_list
  

Exp_dat — это столбец даты истечения срока действия в таблице, который мне нужно обновить.

Я попытался удалить «session.» в переменной expdate, и это ничего не дало. Аналогично для удаления любых пробелов вокруг строки 24 «exp_dat».

Ответ №1:

В приведенном сообщении об ошибке не содержится жалоб на вставленное значение. В ней говорится, что поле «exp_dat» не существует в вашей таблице / просмотре «новости».

Первое, что нужно сделать, это дважды проверить, действительно ли существует поле с именем «exp_dat». Если у вас нет прямого доступа к базе данных, просто запустите запрос из ColdFusion и сбросьте результат запроса.

 <cfquery name="getSomeRowsFromNewsTable" datasource="#db#" maxrows="10">
select * from news
</cfquery>
<cfdump var="#getSomeRowsFromNewsTable#" abort="true">
  

Возможно, кто-то присвоил полю псевдоним, или не включил существующее поле в представление, или оно называется «exp_dattim», или …

Комментарии:

1. Я запустил инструкцию select, которая получает все строки, а затем: <cfdump var=»#get_info.columnlist #»> и получил: DISPLAY, EXP_DAT , ID, IS_CURRENT, MES_DAT, MES_SUB, MES_TEXT, MES_TIM, SCROLLSHOW, Поэтому кажется, что столбец действительно существует

2. @BarrettChamberlain ваш комментарий противоречит тому, что v принимает ответ .., Можете ли вы рассказать нам, что на самом деле решило проблему? Чувствительность к верхнему / нижнему регистру в имени поля?

Ответ №2:

Задан запрос на вставку, такой как

 INSERT INTO tblname ('column1', 'column2', 'column3' ...) VALUES ...
  

Попробуйте использовать квадратные скобки — это [] — вокруг имен столбцов, вот так:

 INSERT INTO tblname ([column1], [column2], [column3] ...) VALUES ...
  

Это сработало для меня в интерпретаторе Access SQL GUI, но может не решить конкретную ситуацию OP (Coldfusion и т.д.).

Ответ №3:

Я несколько раз сталкивался с этими проблемами в MS Access. Я знаю, что имя столбца написано правильно и что столбец существует. Например, я могу без проблем выполнить ‘SELECT’ в столбце, но когда я пытаюсь выполнить простую вставку SQL, я получаю эту ошибку: «… Неизвестное имя поля » Я ничего не вводил, просто использовал копирование и вставку, поэтому нет никаких шансов на опечатку. Access буквально распознает имя столбца в инструкции SELECT и НЕ распознает это же имя столбца при попытке вставки.

Похоже, это ошибка в MS Access 2010.

Комментарии:

1. Я могу подтвердить эту ошибку и в 2007 году. Как я обошел ошибку, я заметил, что Access любезно переименовал столбец в конструкторе запросов в то, что он хотел, чтобы это было. Если бы я изменил имя столбца в таблице, чтобы оно соответствовало этому, то запрос Insert выполнялся бы просто отлично.

Ответ №4:

Попробуйте обернуть каждое значение, которое вы вставляете в свою инструкцию insert, одним quotes.ie '#variable#', '#another_var#' — и так далее. Я думаю, что у меня была такая же проблема, но это исправило ее.

Вопрос:

INSERT INTO содержит следующее неизвестное имя поля:

NoName “. Убедитесь, что вы правильно набрали имя и повторите операцию.

Это ошибка, возникающая при попытке вставить запись в файл dbase (.dbf) из приложения .Net, над которым я работаю.

Я использую Oledb соединение следующим образом:

OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:UsersDavidDesktopDbase_Files;Extended Properties=dBASE IV;User ID=Admin;Password=");

Во время выбора у меня были подобные проблемы. Некоторые столбцы возвращаются как ” NoName “, но все еще с данными. Я просто использую номер индекса столбца вместо имени столбца.

Теперь мне нужно вставить, и это был блок. Такая же ошибка возникает, если вы скажете (если вы не указали имена столбцов):

INSERT INTO [tablename.dbf] VALUES (?, ?, ?);

Пример полного кода ниже:

OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:UsersDavidDesktopDbase_Files;Extended Properties=dBASE IV;User ID=Admin;Password=");

connection.Open();

OleDbTransaction trans = connection.BeginTransaction();
OleDbCommand command = new OleDbCommand(@"INSERT INTO [tablename.DBF]
VALUES
(
?, ?, ?
);", connection, trans);

command.Parameters.AddWithValue("param1", 7);
command.Parameters.AddWithValue("param2", "RCN");
command.Parameters.AddWithValue("param3", 0);

try
{
command.ExecuteNonQuery();
trans.Commit();
}
catch (Exception e)
{
trans.Rollback();
throw e;
}
finally
{
connection.Close();
}

Я видел форумы обсуждать это, когда это происходит в Ms Access. Но ничего не осталось на dbase. Думал, что это вещь driver.

Файл dbase был создан приложением dbase plus (2007).

Лучший ответ:

Через некоторое время я узнал, что это произошло с таблицами с именем поля длиной более 8 или 9 символов. Когда его 10 или более символов длиннее, имя поля возвращает “NoName”. Это звучит смешно. Когда я сделал название поля короче, это сработало нормально.

Я понял это здесь

Теперь с настройками полей, мой примерный код выше работает отлично.

Ответ №1

Не используйте вопросительные знаки в сочетании с именованными параметрами, даже @param1 и т.д. Если вы вставляете три значения в эту таблицу, то укажите параметры в тексте команды:

OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:UsersDavidDesktopDbase_Files;Extended Properties=dBASE IV;User ID=Admin;Password=");

connection.Open();

OleDbTransaction trans = connection.BeginTransaction();
OleDbCommand command = new OleDbCommand(@"INSERT INTO [tablename.DBF]
VALUES
(
@param1, @param2, @param3
);", connection, trans);

command.Parameters.AddWithValue("param1", 7);
command.Parameters.AddWithValue("param2", "RCN");
command.Parameters.AddWithValue("param3", 0);

try
{
command.ExecuteNonQuery();
trans.Commit();
}
catch (Exception e)
{
trans.Rollback();
throw e;
}
finally
{
connection.Close();
}

Ответ №2

Вы очень близки, но то, что вы, вероятно, терпите неудачу, – это рассказывать о WHOCKH столбцах, которые вы вставляете в значения. Да, OleDB использует “?” как владельцы мест для параметров, и они должны совпадать с тем же порядком, что и их соответствующие потребности SQL, выбирать, вставлять, обновлять или удалять. Добавьте явные столбцы перед предложением “Значения”.

OleDbCommand command = new OleDbCommand(
@"INSERT INTO [tablename.DBF] ( tblColumn1, tblColumn2, tblColumn3 )
VALUES  ( ?, ?, ? )", connection, trans);

THEN add your parameters in the specific order to match the command.

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

Фактическое присвоение параметров, как у вас было, было нормально для вашего собственного уточнения, но порядок параметров определенно коррелирован с “?” держателей мест в заявлении о вставке.

Получаю ошибку, поле такое в таблице есть:

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

Вот код:

string connectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=base.mdb";
OleDbConnection myConnection;
myConnection = new OleDbConnection(connectString);
myConnection.Open();
var query = "INSERT INTO [Автомобили] (Позывной,Фамилия,Имя,Отчество,[Дата рождения],[Дата приема на работу],[Номер ВУ],[Дата выдачи ВУ],[Дата окончания ВУ],[На больничном],[В отпуске],Уволен,[Причина увольнения]) VALUES (9,'9','9','9',#12.12.12#,#12.12.12#,'9',#12.12.12#,#12.12.12#,true,true,true,'9')";
OleDbCommand command = new OleDbCommand(query, myConnection);
command.ExecuteNonQuery();
myConnection.Close();

введите сюда описание изображения

Понравилась статья? Поделить с друзьями:
  • Инструкция inface ultrasonic ionic cleaner
  • Инструкция indesit wp 1040 txr
  • Инструкция indesit iwub 4105 на русском языке
  • Инструкция indesit 421xw по применению
  • Инструкция include как выполняется кем выполняется