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:\Users\David\Desktop\Dbase_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:\Users\David\Desktop\Dbase_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.
Вопрос:
INSERT INTO
содержит следующее неизвестное имя поля:
”
NoName
“. Убедитесь, что вы правильно набрали имя и повторите операцию.
Это ошибка, возникающая при попытке вставить запись в файл dbase
(.dbf
) из приложения .Net
, над которым я работаю.
Я использую Oledb
соединение следующим образом:
OleDbConnection connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\David\Desktop\Dbase_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:\Users\David\Desktop\Dbase_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:\Users\David\Desktop\Dbase_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.
Нет необходимости в закрытии полу в командном выражении, так как у вас была только одна команда вставки.
Фактическое присвоение параметров, как у вас было, было нормально для вашего собственного уточнения, но порядок параметров определенно коррелирован с “?” держателей мест в заявлении о вставке.
MurCode
- Форумы
- Поиск
- О проекте
Вставка строк в таблицу
DDT
Дата: 14.04.2004 16:12:17
Вставляю в таблицу строку:
«INSERT INTO [Рассылка] VALUES(Наименование, Комерческое_наименование, Город)»
Но в таблице «Рассылка» есть еще одно поле — ID. Оно является счетчиком.
Каков должен быть запрос чтобы строка вставилась, а все ругается.
Alexander Popov
Дата: 14.04.2004 16:19:34
INSERT INTO [Рассылка] () В скобках указать в какие поля идет insert. И все должно работать.
АлексейК
Дата: 14.04.2004 16:19:42
INSERT INTO [Рассылка] (Наименование, Комерческое_наименование, Город)VALUES(Наименование, Комерческое_наименование, Город)
DDT
Дата: 14.04.2004 16:24:49
И так я пробовал.
Отвечает:
Инструкция INSERT INTO содержит неизвестное имя поля ‘Наименование’. Проверьте, что имя поля задано без ошибок, и повторите операцию.
Kelme
Дата: 14.04.2004 16:33:16
INSERT INTO [Рассылка] VALUES('Наименование', 'Комерческое_наименование', 'Город')
DDT
Дата: 14.04.2004 16:42:05
Говорит:
Не совпадает число значений запроса и число результирующих полей.
Да, потом, кавычки не пойдут, т.к. мне надо вставлять значения полей формы.
Kelme
Дата: 14.04.2004 16:47:02
а вниметельно прочесть то, что АлексейК и Alexander Popov написали слабо?
DDT
Дата: 14.04.2004 16:48:40
Нет не слабо.
Все всем спасибо. Это называется «конец дня». Ничего не соображаю. Оказывается вставляю не в ту таблицу Ведь бывает же такое.
Спасибо всем за содействие и понимание.
← →
Мальчик
(2012-02-29 17:14)
[0]
Здравствуйте.
Столкнулся с проблемой при работе с ADO. Установил соединение с DBF,
выполняю INSERT. Работает. Но, если имя поля в таблице «Names»
добавление не выполняется. Ошибка синтаксиса Insert into. Я так понял, поле с зарезервированным именем. Но мне просто необходимо сажать именно в это поле.
qMain.SQL.Text := «insert into mtk.dbf (NAMES) values (:ns)»;
qMain.Parameters.ParamByName(«ns»).Value := «Тест»;
qMain.ExecSQL;
Подскажите как быть?
Сторонние компоненты использовать мне нельзя, BDE тоже.
← →
Ega23 ©
(2012-02-29 17:15)
[1]
qMain.SQL.Text := "insert into mtk.dbf ("NAMES") values (:ns)";
?
← →
Delphi2007
(2012-02-29 17:19)
[2]
> qMain.SQL.Text := «insert into mtk.dbf («NAMES») values
> (:ns)»;
> ?
>
«Инструкция INSERT INTO содержит неизвестное имя поля «»NAMES»». Проверьте, что имя задано без ошибок, и повторите операцию».
← →
sniknik ©
(2012-02-29 17:19)
[3]
> с зарезервированным именем.
такие имена, а также с пробелами и т.д. нестандартные, экранируются кавычками (или другими символами в зависимости от движка), попробуй [Names].
> BDE тоже.
ты его уже используешь. просто «с широко закрытыми глазами».
← →
Delphi2007
(2012-02-29 17:22)
[4]
> такие имена, а также с пробелами и т.д. нестандартные, экранируются
> кавычками (или другими символами в зависимости от движка),
> попробуй [Names].
То, что нужно. Спасибо.
← →
Anatoly Podgoretsky ©
(2012-02-29 17:36)
[5]
Или так
qMain.SQL.Text := "insert into mtk.dbf ("NAMES") values (:ns)";
или такqMain.SQL.Text := "insert into mtk.dbf ([NAMES]) values (:ns)";
Какой подойдет, в зависимости от провайдера
← →
Delphi2007
(2012-02-29 17:38)
[6]
Подскажите пожалуйста как настраивать кодировку. Я сейчас сажаю данные с кириллицей, а они не читабельны в FoxPro. Нужно прописывать в строке соединения или при передаче параметров менять кодировку?
← →
Ega23 ©
(2012-02-29 17:38)
[7]
ИМХО, надо ноги за такие наименования отстреливать.
Костыли на ровном месте.
Впрочем, тема для холивара.
← →
Ega23 ©
(2012-02-29 17:39)
[8]
> Подскажите пожалуйста как настраивать кодировку. Я сейчас
> сажаю данные с кириллицей, а они не читабельны в FoxPro.
> Нужно прописывать в строке соединения или при передаче
> параметров менять кодировку?
И Collation настраивать.
← →
Delphi2007
(2012-02-29 17:40)
[9]
> ИМХО, надо ноги за такие наименования отстреливать.
> Костыли на ровном месте.
> Впрочем, тема для холивара.
У нас нет выбора, нужно отправлять данные в ведомство где требуют именно в таком формате.
← →
Anatoly Podgoretsky ©
(2012-02-29 17:43)
[10]
> Delphi2007 (29.02.12 17:38) [6]
Неизвестна ни версия СУБД, ни провайдер, ни версия «dbf»
Ничего неизвестно
← →
Anatoly Podgoretsky ©
(2012-02-29 17:44)
[11]
> У нас нет выбора, нужно отправлять данные в ведомство где
> требуют именно в таком формате.
Тогда вопроса нет, нельзя, так нельзя
← →
Delphi2007
(2012-02-29 17:50)
[12]
> Неизвестна ни версия СУБД, ни провайдер, ни версия «dbf»
> Ничего неизвестно
dBase IV.
Строка соединения: Provider=Microsoft.JET.OLEDB.4.0;Data Source=D:\;Extended Properties=dBase IV;
← →
Smile
(2012-02-29 17:55)
[13]
Может кто-нить подскажет какой сейчас год на дворе?
Заранее спасибо:)
← →
Anatoly Podgoretsky ©
(2012-02-29 17:58)
[14]
> Delphi2007 (29.02.2012 17:50:12) [12]
В данной СУБД нет кодировки для dBase IV, она машинная
← →
sniknik ©
(2012-02-29 18:05)
[15]
надо поставить OEM в Jet (в реестре), + если используется «внешний» BDE (установлен и настроено на него) то в нем у драйвера поставить «без кодировки» ansi вроде бы.
#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#'
— и так далее. Я думаю, что у меня была такая же проблема, но это исправило ее.