Драйвер odbc excel слишком мало параметров требуется 1

Обновлено: 02.07.2024


Понимаю, что тема уже поднималась. Перечитал всё что смог найти.
Но никак не получается изменить поле в Paradox-овской таблице.
Делаю примерно так:

SET MULTILOCKS ON
aaa = sqlconnect("my_db")
bbb = SQLEXEC(aaa,"select * from c:\db\my.db", "mydb")
= CURSORSETPROP("Tables", "mydb")
= CURSORSETPROP('Buffering', 5, 'mydb' )
REPLACE f_name WITH "111"
= TABLEUPDATE(.T. T.,"mydb")
USE IN mydb
= SQLDISCONNECT(aaa)

Всё отрабатывает. И TABLEUPDATE() выдаёт .Т., но db остаётся нетронутой.
Тут как-то писали что не любой драйвер ODBC даёт возможность записи - может в этом дело?
И где взять, который разрешает запись?

1. Настроить полученную выборку как обновляемую
2. Создать RV и там посмотреть настроить обновление
3. Использовать SQLEXEC(hnd,'update my set f_name = [1111] where ключевое_поле = ключу ' )


------------------
Есть многое на свете, друг Горацио.
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет) 3. - не проходит (ответ -1)
2. RV - это "Tools"->"Wizards"->"Query"->"Remote View Wizards" ??
- создал (хотя для меня не желательно: db-файлы валяются в нескольких десятках папок, это сколько же видов надо сделать?!), что понял - настроил, говорит нужен обновляемый запрос.
1. ну и исходя из всего: что значит "как обновляемую"?? как это настраивается? nekto_viking
2. RV - это "Tools"->"Wizards"->"Query"->"Remote View Wizards" ??
- создал (хотя для меня не желательно: db-файлы валяются в нескольких десятках папок, это сколько же видов надо сделать?!), что понял - настроил, говорит нужен обновляемый запрос.

В конструкторе "галку" надо поставить SendUpdate, так же надо указать поле являющееся ключом

nekto_viking
1. ну и исходя из всего: что значит "как обновляемую"?? как это настраивается?

Это значит, что изменения будут сбрасываться в источник данных либо автоматически, либj по команде TableUpdate.


------------------
Есть многое на свете, друг Горацио.
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)

if SQLEXEC(aaa, 'UPDATE my SET f_name = m.ccc') < 0
AERROR(arr)
for i = 1 to alen(arr)
?arr(i)
endfor
endif

1526
"Connectivity error: [Microsoft][Драйвер ODBC Paradox] Слишком мало параметров. Требуется 1."
"[Microsoft][Драйвер ODBC Paradox] Слишком мало параметров. Требуется 1."
07001
-3010
1
NULL

ещё бы знать чего это всё значит

nekto_viking
прописал:
if SQLEXEC(aaa, 'UPDATE my SET f_name = m.ccc') < 0
AERROR(arr)
for i = 1 to alen(arr)
?arr(i)
endfor
endif

1526
"Connectivity error: [Microsoft][Драйвер ODBC Paradox] Слишком мало параметров. Требуется 1."
"[Microsoft][Драйвер ODBC Paradox] Слишком мало параметров. Требуется 1."
07001
-3010
1
NULL

ещё бы знать чего это всё значит

1. Не определена в самом запросе переменная m.ccc
'UPDATE my SET f_name = m.ccc'

2. Данная команда update при правильном синтаксисе обновит ВСЕ записи таблицы, поэтому надо в update дописать условие, для каких записей призводить замену.


------------------
Есть многое на свете, друг Горацио.
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)

сглупил
а условие, это я потом разберусь, пусть хоть чего-нибудь обновит. пускай все.
теперь при определенной переменной выдаёт:

"В операции должен использоваться обновляемый запрос"

так же ругается и при работе с RV
похоже пришёл к своим баранам. как запрос сделать обновляемым?


------------------
Есть многое на свете, друг Горацио.
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
результат:
1526
"Connectivity error: [Microsoft][Драйвер ODBC Paradox] Слишком мало параметров. Требуется 1."
"[Microsoft][Драйвер ODBC Paradox] Слишком мало параметров. Требуется 1."
07001
-3010
1
NULL

а при:
SQLEXEC(aaa, "UPDATE my SET f_name = 'Ivanoff'")

результат:
"Connectivity error: [Microsoft][Драйвер ODBC Paradox] В операции должен использоваться обновляемый запрос."

Попробуйте добавить настройку cusrorsetprop(SendUpdating,.t.)
хотя это как раз то о чем Павел и говорил в п.1 первого поста Дмитрий Петров
Попробуйте добавить настройку cusrorsetprop(SendUpdating,.t.)

добавил
результат:
"Connectivity error: [Microsoft][Драйвер ODBC Paradox] В операции должен использоваться обновляемый запрос."

. я уже согласен и на простое конвертирование из DBF в DB.
можно и внешнюю програмулинку, лиш бы в пакетном режиме работала.
в инете такую не смог найти, если у кого есть - поделитесь.

"Если ничего не помогает, прочтите, наконец, документацию"

Вы уверены, что ТАКОЙ синтаксис команды UPDATE-SQL для Paradox является корректным? В каждом языке есть свои особенности диалекта Select-SQL. Возможно, в Paradox надо явно указывать опцию FROM. Например, что-то вроде такого

UPDATE my SET f_name = 'Ivanoff' FROM c:\db\my.db

Возможно, надо указать полный путь доступа, например

UPDATE c:\db\my.db SET f_name = 'Ivanoff'

Да мало ли, что там является корректным синтаксисом! Сначла добейтесь корректного выполнения запроса непосредственно в среде Paradox, а потом уже пытайтесь перенести его через ODBC.

Владимир Максимов
"Если ничего не помогает, прочтите, наконец, документацию"
Вы уверены, что ТАКОЙ синтаксис команды UPDATE-SQL для Paradox является корректным? В каждом языке есть свои особенности диалекта Select-SQL. Возможно, в Paradox надо явно указывать опцию FROM. Например, что-то вроде такого

UPDATE my SET f_name = 'Ivanoff' FROM c:\db\my.db

Возможно, надо указать полный путь доступа, например

UPDATE c:\db\my.db SET f_name = 'Ivanoff'

Да мало ли, что там является корректным синтаксисом! Сначла добейтесь корректного выполнения запроса непосредственно в среде Paradox, а потом уже пытайтесь перенести его через ODBC.


Видимо придётся поизучать Paradox. Надеялся малой кровью.
Но боюсь что проще будет узнать структуру db-файла и написать конвертор, тем более, что у меня db только с тремя типами полей.
Всем спасибо. Но если кто найдёт готовый конвертор - буду очень благодарен!

Только учти - что там страничная организация я видел только по 2 кила, если запись не попоадает в страницу - переносится на другую


------------------
Часто бывает так, что есть над чем задуматься, а нечем. Как вариант: поискать более свежий odbc-драйвер парадоха. Если есть где-то рядом дельфи, а еще лучше дельфист - попробуй решить проблему таким путем.

Похоже Paradox - это тот ещё продукт. Вот к примеру что нарыл:

"Самые значащие ограничения для драйвера PARADOX:
Для того, чтобы Вы имели возможность производить действия по добавлению, удалению записей или редактированию данных в таблице, таблица должна иметь первичный ключ.
Первичный ключ должен быть определен для первых 'n' полей таблицы.
Вы не можете создавать для таблицы индексы, если для нее не определен первичный ключ.
Первый создаваемый для таблицы уникальный индекс будет создан как первичный ключ.
Первичный ключ может быть создан для таблицы только в том случае, если в ней нет ни одной записи.
Действия по добавлению или удаления полей в таблице должны быть произведены до того, как для нее создан первичный ключ.
Удалить однажды созданный первичный ключ для таблицы невозможно."

Вроде получилось. Похоже проблема была в том, что необходимо для DB иметь первичный ключ.
С ключём по полю number заработало.

Читайте также: