powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Update SQL
10 сообщений из 10, страница 1 из 1
Update SQL
    #38176901
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такой код:

=ADIR(mas,_p+strt(_myapp, '.','*.'))
sql_server= Sqlstringconnect(...) && создание самого соединения с сервером
SQLEXEC(sql_server,"Update AppHouse set [textApp]='' where [App]=?_myapp")
FOR i=1 TO ALEN(mas,1)
_v=GETWORDNUM(mas(i,1),2,'_')
_v=VAL(LEFT(_v, RAT('.',_v)-1))
_d=CTOT(TRANSFORM(DTOS(mas(i,3)),'@R 9999-99-99')+'T'+mas(i,4))
rc=SQLEXEC(sql_server,'Select COUNT(*) as kol from AppHouse where App=?_myapp and vers = ?_v', '_xx1')
IF _xx1.kol = 0
rc=SQLEXEC(sql_server,'Insert into AppHouse (App, vers, EdishionTime, Action) values (?_myapp, ?_v, ?_d, 1)')
ELSE
rc=SQLEXEC(sql_server,'Update AppHouse set EdishionTime=?_d where App=?_myapp and vers=?_v')
Endi
CREATE CURSOR _tt (txt W)
INSERT INTO _tt (txt) VALUES (FILETOSTR(_p+mas(i,1)))
rc=SQLEXEC(sql_server,'Update AppHouse set [TextApp]=?_tt.txt where [App]=?_myapp and [vers]=?_v')
USE IN _tt
USE IN _xx1
endf
rc=SQLDISCONNECT(sql_server)

На самом деле в настоящее время работает только ветка Update. При этом заполнение поля TextApp происходит через запись: 1-заполнена, 2-я нет, 3-я заполнена, 4-я нет, ... Всего 9 записей.

Со стороны fox-a все работает нормально, Sql на каждой команде возвращает 1. А обновление не работает.
...
Рейтинг: 0 / 0
Update SQL
    #38176913
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisСо стороны fox-a все работает нормально, Sql на каждой команде возвращает 1. А обновление не работает.
Значит нет записей подпадающих под условие указанное во WHERE

Вставь перед UPDATE проверку и отладчиком смотри
Код: sql
1.
2.
3.
4.
rc=SQLEXEC(sql_server,'select count(*) as nUpd where [App]=?_myapp and [vers]=?_v', 'tcount')
if rc != 1 or tcount.nUpd = 0
   set step on
endif



В синтаксисе UPDATE есть опция OUTPUT , вроде как возвращает измененные записи. Можешь ее попробовать. Я ни разу не пользовался.

PS Названия переменных не стоит начинать с подчеркивания. Может совпасть со спец.переменными фокса (_tally, _pageno и т.п.). Почитай про венгерскую нотацию.
...
Рейтинг: 0 / 0
Update SQL
    #38176924
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

В 8-й строке как раз проверка есть запись чи нет. Еси нет, добавляет.
...
Рейтинг: 0 / 0
Update SQL
    #38176943
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamis CREATE CURSOR _tt (txt W)
INSERT INTO _tt (txt) VALUES (FILETOSTR(_p+mas(i,1)))

попробуй это заменить на
lcTextApp = FILETOSTR(_p+mas(i,1))
и так соответственно
Код: sql
1.
rc=SQLEXEC(sql_server,'Update AppHouse set [TextApp]=?lcTextApp where [App]=?_myapp and [vers]=?_v')


может с этим как-то связано
...
Рейтинг: 0 / 0
Update SQL
    #38176952
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisFILETOSTR(_p+mas(i,1))

А файл не пустой случайно?
Инициализировать надо гарантированно несуществующим значением
Код: sql
1.
SQLEXEC(sql_server,"Update AppHouse set [textApp]='!@!@!@!' where [App]=?_myapp")
...
Рейтинг: 0 / 0
Update SQL
    #38176964
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Не помогло.
Наверно надо добавить - AppTxt - поле Image, длина вложений ~ 6М.
Пробовал - ч/з строку, мемо, cast(). Для всех этих вариантов заменяет на значение 0х
Для Blob - кое-где заменяет на содержимое файла (См. картинку). Запись производилась в порядке возрастания версий.
...
Рейтинг: 0 / 0
Update SQL
    #38177064
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я правильно понял, то вопрос звучит так.

По какой причине поле [TextApp] остается пустым, если запись, удовлетворяющая условию WHERE - существует? Коанда выглядит так?

Код: sql
1.
rc=SQLEXEC(sql_server,'Update AppHouse set [TextApp]=?_tt.txt where [App]=?_myapp and [vers]=?_v')




Ну, для начала, надо проверить тот факт, что содержимое _tt.txt - не пустое ДО попытки вставки. Может, просто нет ничего в файле?

Кстати, после символа вопросительного знака можно написать функцию FoxPro, а не только параметр. Т.е. можно вот так

Код: sql
1.
2.
3.
4.
5.
if mas[i,2] = 0
    MessageBox('Файл ' + mas[i,1] + ' пустой')
else
    rc=SQLEXEC(sql_server,'Update AppHouse set [TextApp]=?cast(filetostr(_p+mas[i,1]) as W) where [App]=?_myapp and [vers]=?_v')
endif
...
Рейтинг: 0 / 0
Update SQL
    #38177081
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там картинки сохраняются. Может так попробовать
Код: sql
1.
 rc=SQLEXEC(sql_server,'Update AppHouse set [TextApp]=?CREATEBINARY(filetostr(_p+mas[i,1])) where [App]=?_myapp and [vers]=?_v')



Тут еще про картинки было
...
Рейтинг: 0 / 0
Update SQL
    #38177115
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ,

_tt.txt не пустое. Вывожу статистику после Insert into _tt ... в виде ?vers, len(_tt.txt) длины от 5,1М до 7М. Это я проверил первым делом.
...
Рейтинг: 0 / 0
Update SQL
    #38177133
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
Да, createbinary помогло.

Dima TИнициализировать надо гарантированно несуществующим значением


Похоже ваще не отрабатывало на этих строках - 3-я строка очищает это поле и после замен оно не меняется. Если инициируешь пробелом - остается 0х, если NULL он и остается.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Update SQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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