|
Чудеса компилятора при работе с датой в dbf
|
|||
---|---|---|---|
#18+
Когда-то давно написал костыль, чтобы из базы MS SQL запросом SQLEXEC формировать табличку и выгружать ее в dbf. Костыль потому что написан был криво, но работал исправно. Сегодня обнаружил, что часть полей таблицы с типом DATE в файле выгрузки пустые. Выполнил скрипт - даты есть. Раскопал исходники костыля, запустил в FoxPro, все выгрузилось с датами. Скомпилировал exe-шник, запустил на выполнение, в некоторых полях, где должна была быть дата - пусто. Сделал: авторSQLEXEC (gnConnHandle, lcquery, 'lcCursor') COPY TO c:\temp\1111\2.dbf Открыл полученную 2.dbf, даты все на месте. Сделал: авторSELECT * FROM c:\temp\1111\2.dbf INTO CURSOR curstemp READWRITE *!* SELECT * FROM lcCursor INTO CURSOR curstemp READWRITE ALTER TABLE curstemp ALTER CODE N (20) ALTER TABLE curstemp ALTER NAME C (250) ALTER TABLE curstemp ALTER CNTR C (250) ALTER TABLE curstemp ALTER FIRM C (250) ALTER TABLE curstemp ALTER GDATE D ALTER TABLE curstemp ALTER QNT N (10) ALTER TABLE curstemp ALTER PRICE1 N (10,2) COPY TO c:\temp\1111\3.dbf as 866 Открыл 3.dbf, часть дат потерялась. Причем, напомню, даты теряются, если запускать скомпилированный exe-шник. Если все это делать из Visual FoxPro, ничего не теряется. Куда дальше копать, не знаю... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2017, 14:18 |
|
Чудеса компилятора при работе с датой в dbf
|
|||
---|---|---|---|
#18+
В настройки копай Команды SET Дело в том, что, во-первых, настройки по умолчанию для среды разработки могут отличаться от настроек по умолчанию для режима Run-Time (выполнения в готовом EXE). А, во-вторых, могли быть специально сделаны особые настройки в среде разработки про которые "забыли" при создании приложения Если я правильно понял, то в "костыле" происходит модификация типа существующих столбцов. Ну, там, DateTime заменить на Date, например. А это значит, что при этом должна выполняться какая-то конвертация содержимого из одного формат в другой. Вот настройки и определяют правила этих преобразований Раз речь идет о датах, то, вероятно, надо смотреть настройки вроде SET DATE SET CENTURY Кстати, не пробовал посмотреть, есть ли что-то общее у тех дат, которые "теряются" и срани с теми, которые преобразуются без потерь И еще один момент. Может быть дело не в преобразовании, а в самой первичной выборке? Может в готовом EXE уже на команде SQLEXEC() получаем пустые даты? Т.е. надо бы еще проверить настройки реквизиты соединения в готовом EXE ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2017, 15:04 |
|
Чудеса компилятора при работе с датой в dbf
|
|||
---|---|---|---|
#18+
ВладимирМ, Сразу спасибо за ответ, потому что как правило, когда я что-то искал по теме фокса раньше, то мои поиски или заканчивались Вашим советом кому-то или этот совет подсказывал направление, в какую сторону копать. По теме: Настройки сейчас покопаю. По конвертации, в курсоре все данные в формате Character или Integer. А в dbf мне некоторые нужны в виде Numeric, Date. Для этого я и делаю ALTER. Общее искать пробовал. Не нашел. Нормальные такие даты. Проблемные - 31.01.2019, 31.07.2018, 17.10.2019, 30.06.2019, 24.06.2018, нормально работающие - 01.02.2019, 01.12.2019, 01.05.2018, 01.09.2018, 01.11.2018,01.12.2025... Разве что если в исходном файле ручками удалить строки, в которых после ALTER даты не зануляются, а оставить проблемные, то после ALTER они все равно занулятся. Такое чувство, что чем-то именно эти даты отличаются, но я в упор не вижу, чем. SQLEXEC в екзешнике отрабатывает нормально т.к. екзешник с кодом Код: sql 1. 2.
выдает dbf-ку без пустых дат. Но как только я в коде добавляю кусок с конвертацией, итоговая dbf-ка уже будет с несколькими пустыми полями GDATE. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2017, 15:35 |
|
Чудеса компилятора при работе с датой в dbf
|
|||
---|---|---|---|
#18+
muse_9636Общее искать пробовал. Не нашел. Нормальные такие даты. Проблемные - 31.01.2019, 31.07.2018, 17.10.2019, 30.06.2019, 24.06.2018, нормально работающие - 01.02.2019, 01.12.2019, 01.05.2018, 01.09.2018, 01.11.2018,01.12.2025... А теперь поменяйте местами день и месяц в каждой дате и может тогда поймете разницу между работающими и проблемными датами. Нормальные они для вас, а вот при конвертации где-то происходит неправильная интерпретация этих дат. Ибо, похоже, даты то в строках лежат, не так ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2017, 15:42 |
|
Чудеса компилятора при работе с датой в dbf
|
|||
---|---|---|---|
#18+
правильный прохрдящий., Только сейчас обратил внимание, что среди более 7000 строк в "проблемной" таблице нет ни одной с числом больше или равном 13. Совпадение? Не думаю! (с) Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2017, 15:57 |
|
|
start [/forum/topic.php?fid=41&msg=39425909&tid=1581977]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 140ms |
0 / 0 |