Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Ошибка VFP6 при определении длины поля (char или varchar) в remote view / 9 сообщений из 9, страница 1 из 1
05.10.2004, 15:22
    #32724277
strizh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка VFP6 при определении длины поля (char или varchar) в remote view
Есть сервер (MySQL, PostgreSQL и пр.), подключение по ODBC. Конструктор удаленных представлений видит таблицу, берет символьную колонку исходного типа char или varchar, ставит свой тип character, а длину ставит 20, если длина исходного >=20, и реальную, если она меньше 20. Если в Properties поменять - то этого изменения хватает только до следующего обращения к Properties этой или другой колонки. Соответственно, в grid, browse, отчетах и прочих элементах отображаются (и позволяется ввод) только 20 символов на поле. Что за дурацкий глюк ?
...
Рейтинг: 0 / 0
05.10.2004, 15:55
    #32724373
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка VFP6 при определении длины поля (char или varchar) в remote view
Большая магия, однако.

Если изменилась структура исходных таблиц на сервере (MySQL), то лучше вообще удалить Remote View и создать его заново!

Можно, конечно, попробовать программно изменить тип поля в Remote View, как написано в Help

DBSETPROP('mytable.icost', 'field', 'DataType', 'N(4,2)')

Здесь вместо MyTable напиши имя RemoteView

Но вряд ли что из этого получится.


Еще выполни очистку контейнера базы данных:

OPEN DATABASE MyBase EXCLUSIVE
PACK DATABASE

Или в режиме модификации базы данных пункт главного меню DataBase, подпункт CleanUp DataBase. Этот пункт будет доступен только если база данных открыта в режиме Exclusive.
...
Рейтинг: 0 / 0
05.10.2004, 17:44
    #32724636
strizh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка VFP6 при определении длины поля (char или varchar) в remote view
pack database не помогает. Все равно длина хотя-бы одного поля остается равной 20. Во вновь созданной базе .dbc и вновь созданном view наблюдается та же картинка. Мало того. Имеется большая проблема с буферизацией. В режиме мягкой буферизации таблицы-представления (5) функция tableupdate дает запросы на изменение (или вставку) только для последней измененной (добавленной) записи. Переключение режима транзакций для соответствующего представления дает только включение begin ... commit для блока открытия-работы-закрытия представления, но никак не влияет на результат :(. Это дело наблюдается как для grid, так и для browse.
Жопа, короче, с VFP6. Уже попробовал это же как на MySQL, так и на PostgreSQL с разными версиями ODBC-драйверов. Дело-таки в VFP. У меня SP5.
...
Рейтинг: 0 / 0
05.10.2004, 18:23
    #32724727
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка VFP6 при определении длины поля (char или varchar) в remote view
Давай по пунктам, что именно ты делаешь, чтобы получить такой результат

1) Создал таблицу в MySQL с полем Char(40)
2) Создал Remote View к этой таблице, добавил в список полей для выборке имя этого поля и ... в нем это поле автоамтически получилось Char(20)?


По поводу буферизации у тебя неправльное понимание логики работы Remote View.

У тебя есть 2 базы данных: MySQL и FoxPro

Когда ты выполняешь Remote View, то закачивается копия данных (выборка) из MySQL во временные таблицы, под управлением FoxPro.

И буферизация и транзакция в FoxPro относятся не к исходной таблице на MySQL, а именно к этой копии в базе FoxPro.

Т.е. если ты сбросил буфер в базе FoxPro, то ты сбросил его "с концами" в базу MySQL, поскольку транзакция в базе FoxPro никак, никоим образом не может повлиять на данные на MySQL.

Таким образом, для возможного отката в случае ошибки сброса буфера необходимо организовать 2 транзакции: одну собственно на MySQL и другую в базе FoxPro. Причем организовать вручную. Никаких автоматических средств для этого не существует.
...
Рейтинг: 0 / 0
05.10.2004, 19:03
    #32724798
strizh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка VFP6 при определении длины поля (char или varchar) в remote view
>1) Создал таблицу в MySQL с полем Char(40)
>2) Создал Remote View к этой таблице, добавил в список полей для выборке >имя этого поля и ... в нем это поле автоамтически получилось Char(20)?
ИМЕННО !
Но в реальной таблице - несколько текстовых полей (плохо, когда 10-15-20). Автоматически при создании view хотя-бы одно создается с неправильной длиной. Чем больше полей char (varchar) - тем больше ошибок. Если на всех полях поменять все длины на корректные и сохранить view - все равно окажется, что хоть одно поле осталось char 20 :-(Ж)

>По поводу буферизации у тебя неправльное понимание логики работы Remote >View.
Все я понимаю. Не понимаю только, где VFP девает обновления для остальных записей ? Раз уж юзер поменял несколько записей и делает tableupdate, то на сервер должны выдаваться несколько операторов update (insert) ? Неважно, делается begin - commit или нет. Это к слову пришлось. Или tableupdate нужно как-то по-хитрому выдавать ? Например, в цикле, проходя по каждой записи обновленного курсора ? Бо я увидел, что обновляется именно запись, которая текущая на момент tableupdate. А если записей 100-200 ? И что:
go top
scan while .not. eof()
tableupdate()
endscan

Ну и кто-то выдает begin-commit (автоматом или через Exec)
Так, что-ли ???
...
Рейтинг: 0 / 0
05.10.2004, 21:43
    #32724946
strizh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка VFP6 при определении длины поля (char или varchar) в remote view
По tableupdate проехали - я тупой, забыл про параметр :-) А с ошибкой в размере колонок ... Я в задумчивости ...
...
Рейтинг: 0 / 0
06.10.2004, 01:26
    #32725031
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка VFP6 при определении длины поля (char или varchar) в remote view
1) Если у всех работает, а у тебя нет - то кто виноват? Пробуй менять ODBC
драйвера, посмотри что даст SQLCOLUMNS(lnHandle), какие типы полей
получаются после "прямого" SPT запроса - т.е. SQLEXEC(lnHandle, "твой
запрос")

2) У TableUpdate (равно как и tablerevert) есть ПАРАМЕТРЫ - целых 3 штуки -
так что срочно читать хелп.

3) Транзакции (со стороны сервера и ODBC, не фоксовые) могут быть
автоматическими и ручными - автоматические ставятся по дефолту, ручные можно
настроить, но тогда не забывай про SQLCommit(lnHandle).

Вообще-то VFP6 уже порядочно устарел, возможно что там и есть какие-то
глюки.
Кстати View-дизайнер был кривым и в VFP6 и в VFP7 - только в VFP8 починили.
Так чта...
DBSETPROP(... 'DataType', 'C(50)') - для меня работало всегда, и ничего
"самопроизвольно" никуда не исчезало. НО View дизайнером я не пользовался -
мало ли что он там может переназначить... А сложные запросы о и подавно не
может сформировать - так что забей на него.

Posted via ActualForum NNTP Server 1.0
...
Рейтинг: 0 / 0
06.10.2004, 17:22
    #32726586
strizh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка VFP6 при определении длины поля (char или varchar) в remote view
Действительно, кроме как глюком View-дизайнера это не объясняется. Обойти его можно. Нужно исправлять ошибки в длинах полей по одной и сохранять. А при открытии запроса в дизайнере не обращать внимание на ошибку в длине ПЕРВОГО открываемого char-поля. Как сказал ВладимирМ: "Большая магия, однако !" Мне кажется, глюк объясняется большим количеством символов перевода строки в memo-поле Properties для строк таблицы-контейнера базы данных, относящихся к названиям столбцов. Когда смотришь на текст
............&...........-........inoorder.contragent_name.....&MC70
(точки вместо переводов строк), то сам путаешься :-)
...
Рейтинг: 0 / 0
07.10.2004, 03:14
    #32727028
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка VFP6 при определении длины поля (char или varchar) в remote view
Не надо так буквально воспринимать БИНАРНЫЕ даные. И тем более не нужно их
править напрямую (открыв memo-окно). Есть хороший шанс так запороть это
представление, что фокс по C005 вывалиться вообще.

Posted via ActualForum NNTP Server 1.0
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Ошибка VFP6 при определении длины поля (char или varchar) в remote view / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]