27.01.2006, 10:53 | #1 |
Участник
|
Товарищи добрый день, просьба сильно не пинать за вопрос который уже поднимался. Облазил кучу форумов, нарыл кучу инфу по экспорту, пытаюсь сделать так же, но вываливается сообщение об ошибке. Пишет "Недостаточно параметров, требуется 1" .
Использую 'Microsoft ActiveX Data Objects 2.6 Library'.Connection 'Microsoft ActiveX Data Objects 2.6 Library'.Recordset сам код таков Код: DBFBase.Open('MMB_DBF1'); DBFFile.Open('tabl.DBF', DBFBase); VarTXT:='Testmessage'; SqlStr:='insert into "tabl.DBF"(test1) values('+VarTxt+')'; DBFBase.Execute (SqlStr); СПАСИБО. |
|
27.01.2006, 11:36 | #2 |
Участник
|
1. Скорее всего к делу не относится - попробуйте "tabl.DBF" без кавычек.
2. Я не понял насчет "Если вместо VarTxt подставить число то всё ок" - у Вас VarTXT имеет тип Text. Какой тип у поля test1? |
|
27.01.2006, 11:58 | #3 |
Участник
|
1. Пробовал без кавычек название таблицы - не прокатывает, та же ошибка.
2. Когда говорил что с числом прокатывает, то имел ввиду, что если вместо VarTxt подставить Format(VarDec) то запись в dbf прокатывает, соотвественно VarDec имеет формат Decimal. Поле test1 имеет тип Character(10). Народ помогите, уже второй день бьюсь, ничего не выходит. Может быть у гкого то есть готовый объект по экспорту в DBF для Nav3.60 ? Спасибо. |
|
27.01.2006, 12:54 | #4 |
Участник
|
Попробуйте что-то вроде:
'INSERT INTO "' + CurrentDirectory + '\' + 'konfig.dbf' + '" VALUES (' + .... + ')'; |
|
27.01.2006, 16:39 | #5 |
Участник
|
|
|
27.01.2006, 17:54 | #6 |
Участник
|
Кстати, насчет кавычки это мысль - когда Вы явно указываете в тексте команды значение строкового типа, то оно должно быть в кавычках. CurrentDirectory, мне кажется, ни к чему - она должны быть прописана в строке соединения - а вот в команде должно быть 'insert into tabl.DBF(test1) values('+InvComma+VarTxt+InvComma+')', где InvComma это текстовая константа, значением которой является единственный символ - "'". Я так писал запросы на select.
|
|
31.01.2006, 11:29 | #7 |
Участник
|
Цитата:
Сообщение от yd_
Кстати, насчет кавычки это мысль - когда Вы явно указываете в тексте команды значение строкового типа, то оно должно быть в кавычках. CurrentDirectory, мне кажется, ни к чему - она должны быть прописана в строке соединения - а вот в команде должно быть 'insert into tabl.DBF(test1) values('+InvComma+VarTxt+InvComma+')', где InvComma это текстовая константа, значением которой является единственный символ - "'". Я так писал запросы на select.
Код: DBFBase.Execute ('insert into tabl.DBF(test1) values('+InvComma+VarTXT+InvComma+')') Test- значение переменной VarChar |
|
01.02.2006, 10:04 | #8 |
Участник
|
Попробую словами: одинарные кавычки (по-англицки inverted comma, т.е. перевернутая запятая) используются в языке SQL для выделения начала и окончания текстовой строки. Когда Вы пишите 'INSERT t.dbf(int_f) VALUES (' + FORMAT (IntVar) + ')', где поле int_f имеет тип int(4), например, то значение, которое будет в скобках после values, может быть и без одинарных кавычек, т.к. это число. А вот когда переменная типа VarChar, то должны быть кавычки, т.е. 'INSERT t.dbf (char_f) VALUES ('mama')'. Теперь представим, что у нас в Navision есть переменная CharVar типа Text (4). Мы ей присваиваем
CharVar := 'mama'; и пишем QueryText := 'INSERT t.dbf (char_f) VALUES (' + CharVar + ')'; в результате значение переменной QueryText будет 'INSERT t.dbf (char_f) VALUES (mama)', т.е. mama БЕЗ КАВЫЧЕК. Чтобы "вставляемое" значение типа VarChar имело правильный формат, нужно написать QueryText := 'INSERT t.dbf (char_f) VALUES (' + InvComma + CharVar + InvComma + ')'; где InvComma это TextConstant, ЗНАЧЕНИЕМ КОТОРОЙ БУДЕТ ВСЕГО ОДИН СИМВОЛ - ОДИНАРНАЯ КАВЫЧКА. |
|
01.02.2006, 15:08 | #9 |
Участник
|
уважаемый yd спасиб за помощь, всё получилось уже после вашего первого поста, загвоздка была именно в текстовой константе. Ещё раз спасибо. С sql языком знаком, т.к. программлю на VB, но вот особенности Navision пока не все освоил
|
|