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 , прикрепленных в файле — создала таблицы..
выбивает ошибку «Инструкция INSERT INTO содержит неизвестное имя поля №будинку.Проверьте что имя задано без ошибок, и повторите операцию»
как отдельный запрос он работает, но как я понимаю — что из этого запроса значение для код_тарифу должно копироваться в таблицу тОплата_план, т.е. я создаю следующий запрос:
выбивает ошибку, что на картинке Миниатюры
Вложения
0 |
mobile 26788 / 14467 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
||||
02.05.2015, 20:33 |
2 |
|||
1-я ошибка: В запросе на вставку должно быть соответствие количества полей. Вы же в селекте пишете звездочку, т.е. все поля, а в таблице тБудинки 3 поля. Именно об этом акс Вас информирует.
2-я ошибка Во-первых пара ошибок в синтаксисе запроса. Предложение Where должно быть таким (логику не знаю, сужу только по синтаксису)
И кроме того, был символ точка с запятой перед заверщающей скобкой. А точка с запятой это символ конца запроса. Ну и самое важное. В таблице тОплата_план есть 3 обязательных поля: код_оплати_план (ключ), код_тарифу и код_квартири. Попытка создать запись, заполнив только одно из них, приведет к ошибке. Что и случилось
0 |
Маринчик 0 / 0 / 3 Регистрация: 12.10.2012 Сообщений: 150 |
||||
03.05.2015, 23:58 [ТС] |
3 |
|||
ну не понимаю я сама что не так по первой ошибке моей исправила запрос на следущий
а выбивает сообщение с картинки что же не так???????? я не понимаю сама… Миниатюры
0 |
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();