|
с++builder foxpro
|
|||
---|---|---|---|
#18+
Провайдер VFPOLEDB.1 Есть таблица дата время1 время2 номер флаг1 флаг2 Есть старая программа котрая пишет данные в этот файл. алгоритм такой если есть время1 то я переношу из А в базу Б и ставлю в А флаг1 затем проходит некоторое время и в базу добавляется данные снова запрос к А появилось время2 мне нужно перенести в базу 2 это время и обновить флаг2 в базе А Но тут начинаются фокусы update не обновляет флаг 2 Я делаю точно такой же select и он мнн возвращает строку (которую должен обновить update) если сделать реконект то update отрабатывает успешно Еще заметил что если работать на лок машине то работеет сразу а если по сети то такая ошибка если у когто есть идеи то могу выстать исходники и прочее для связи скайп tigr1234 ася ICQ#: 320-006-278 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2008, 13:04 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
tigr1945Но тут начинаются фокусы update не обновляет флаг 2 Это такое сообщение об ошибке? А на какую команду? А по aerror что получено? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2008, 13:10 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
ни каких сообщений нет просто update не отрабатывает т.е он не обновляет записи ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2008, 13:32 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
tigr1945ни каких сообщений нет просто update не отрабатывает т.е он не обновляет записи А что насчет Aerror(). Как проверялось "необновление"? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2008, 13:33 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
Проверял dbviev тоесть. и другой програмоой ничего не обновляет ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2008, 15:48 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
Вобщем в продолжение если я использую провайдера Provider=VFPOLEDB.1 не обновляет запись как писалось раньше если Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c:\mydbpath; работает но медленно У таблицы есть индекс CDX Мне кажется что не используется индексы База фокспро 2,6 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2008, 16:44 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
Взято отсюда How to: Access Visual FoxPro Data in Visual Studio VFP9 Код: plaintext 1. 2.
... A connection string includes the following attribute keywords and values: Provider= cVFPOLEDBProvider Specifies the Visual FoxPro OLE DB Provider (VFPOLEDB). Data Source= cPath Specifies the path to the Visual FoxPro database or a folder containing free tables. For example, c:\Microsoft Visual FoxPro\Samples\Data\Testdata.dbc DSN= cDSNName Specifies an existing ODBC DSN. Mode= cMode Specifies one of the following: Read, ReadWrite, Share Deny None (default), Share Deny Read, Share Deny Write, or Share Exclusive, which includes the previous two modes. Обрати внимание на 4 параметр строки подключения. Он определяет, можно ли вносить изменения или доступ только на чтение. Какое значение использовал у себя? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2008, 17:34 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
Provider=VFPOLEDB.1;Data Source=\\server_k\base;Mode=ReadWrite;Password="";Collating Sequence=MACHINE Вот в таком виде у меня не работает. Вернее получается так что упдайт не отрабатывает если делаю реконект то запрос работает, если ставлю Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=d:\base" то работает но медленно ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2008, 17:37 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
Provider=VFPOLEDB.1;Data Source=\\server_k\base;Mode=ReadWrite;Password="";Collating Sequence=MACHINE вот как было ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2008, 17:40 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
tigr1945Provider=VFPOLEDB.1;Data Source=\\server_k\base;Mode=ReadWrite;Password="";Collating Sequence=MACHINE Вот в таком виде у меня не работает. Вернее получается так что упдайт не отрабатывает если делаю реконект то запрос работает, если ставлю Как мне кажется, ты что-то еще делаешь. Ведь реквизиты соединения можно менять после его установки. Раз реконнект помогает, значит, ты сделал какие-то дополнительные настройки между первоначальной устновкой соединения и подачей команды на модификацию. Сделай тестовый пример: установи соединение и сразу дай команду UPDATE. tigr1945Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=d:\base" то работает но медленно Это слишком старый драйвер. Предназначен для свободных таблиц. И вообще, есть серьезный риск как повредить файлы DBF, так и рассинхронизировать индексный файл и файл DBF. Т.е. ты модификацию сделаешь, а рабочее приложение их "не увидит" или вообще откажется работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2008, 18:10 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
Если не сложно стукни в аське 320-006-278 скайп tigr1234 или скажи как связаться с тобой, у меня получается что я первый раз запустил у меня вычетала прога 1 сроку в базу В в базу А я пометил что перенес время 1 затем 2 програма вписывает время 2 я снова делаю запрос (на одном и томже сооединении) у меня показывает что меремя добавило, я переношу время 2 В базу В (обновляю запись это работает) и мене нужно обновить флаг времени 2 в базе А но запрос отрабатывает ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2008, 18:32 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
и не обновляет флаг, делаю в этомже адоквери точно с такими же параметрами select он мне возвращает 1 запись по логики он должен и обновить ее. но этого не происходит. делал уже просто запрос типа select * from otm where tn=12525 and time_o=7.30 and time_i=7.03 and date={08.08.2008} update otm set flag_out=1 where date={08.08.2008} and time_i=7.03 and time_o=7.30 разницы нет но не обновляет ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2008, 18:36 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
tigr1945Если не сложно стукни в аське 320-006-278 скайп tigr1234 или скажи как связаться с тобой, Только в форуме tigr1945 у меня получается что я первый раз запустил у меня вычетала прога 1 сроку в базу В в базу А я пометил что перенес время 1 затем 2 програма вписывает время 2 я снова делаю запрос (на одном и томже сооединении) у меня показывает что меремя добавило, я переношу время 2 В базу В (обновляю запись это работает) и мене нужно обновить флаг времени 2 в базе А но запрос отрабатывает Под термином "время" что подразумевается? Тип DateTime или просто Date или отдельно Date и отдельно Time? Какой тип данных у Time? Можешь написать здесь команду UPDATE полностью? tigr1945делал уже просто запрос типа select * from otm where tn=12525 and time_o=7.30 and time_i=7.03 and date={08.08.2008} update otm set flag_out=1 where date={08.08.2008} and time_i=7.03 and time_o=7.30 разницы нет но не обновляет Попробуй использовать синтаксис константы типа Date, не зависящий от настройки SET DATE. Это формат вида {^YYYY-MM-DD}. В качестве разделителей можно использовать наклонную черту, дефис или точку. Без разницы. Т.е. получится запрос вида: Код: plaintext
Если поля time_i и time_o - это поля типа Numeric, то попробуй еще такой синтаксис Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2008, 19:08 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
мне кажется что синтаксис тут в норме time_in time_out нумерик в базе upd_client(bool time_out,bool time_in,float t_i,float t_o,int tn,AnsiString dd) { AnsiString sql_txt=""; sql_txt="update otm set "; if(time_in) sql_txt =sql_txt+" flag_in=1, "; else sql_txt =sql_txt+" flag_in=0, "; if(time_out) sql_txt =sql_txt+" flag_out=1 "; else sql_txt =sql_txt+" flag_out=0 "; if(flag_import) // если вставляем из импорта sql_txt =sql_txt+", flag_imp=1 "; sql_txt=sql_txt+" where tn="+ IntToStr(tn)+" and date=:dd1 "; if(time_in) sql_txt=sql_txt+" and time_i=:tin"; if(time_out) sql_txt=sql_txt+" and time_o=:tout "; Mod->ClientFlags->Close(); Mod->ClientFlags->SQL->Clear(); Mod->ClientFlags->SQL->Add(sql_txt); Mod->ClientFlags->Parameters->ParamByName("dd1")->DataType =ftDateTime; Mod->ClientFlags->Parameters->ParamByName("dd1")->Value =dd; if(time_in) { Mod->ClientFlags->Parameters->ParamByName("tin")->Value =Mod->GetData->Fields->FieldByName("time_i")->Value; // Mod->ClientFlags->Parameters->ParamByName("tin")->Value = t_i; } if(time_out) { Mod->ClientFlags->Parameters->ParamByName("tout")->Value =Mod->GetData->Fields->FieldByName("time_o")->Value; } Mod->ClientFlags->ExecSQL(); return true; } ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2008, 19:31 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
Просто не может 1 и тотже код рабоать по пазному ведь после реконекта отрпбатывает обновления флага 2 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2008, 19:39 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
Непосредственно перед ExecSQL() я бы проверил как строку запроса, так и записанные значения параметров. В трассировке. Т.е. не предположения типа "там должно быть", а что есть на самом деле. Не получается ли так, что передаются не те параметры или не совсем та срока запроса? Поскольку модифицируется те данные, которые не участвуют в отборе записей, то, скорее всего, проблема именно в значении параметров или строки запроса. Кстати, реконнект делается в этой же процедуре или в другой? А вариант с последовательным Select + Update как делал? В одной и той же процедуре или две разных? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2008, 20:19 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
да проверял в дебагере все тоже самое. делал и с параметрами, и просто запрос тот который я приводил. результат один и тотже. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2008, 20:49 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
просто на форме, функция Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2008, 21:44 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2008, 21:45 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
Если просто установить задержку перед последним Update (не менее 5 секунд) обновление проходит? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2008, 11:56 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
Попробывал, все по прежнему. А вообще эта функция работала. но что я наделал понять не могу. Или ПК, или мои руки ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2008, 12:15 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
Насколько я вижу, у теб 3 соединения. Не перепутал случайно на последнем Update? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2008, 12:17 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
вобщем заметил еще одно если в на одном квери выполнить сначала запрос Код: plaintext 1. 2. 3. 4. 5. 6. 7.
то код отрабатывет Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.
Получается что чтото остается в запросе что мешает что бы он нормально отрабатывал ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2008, 12:45 |
|
с++builder foxpro
|
|||
---|---|---|---|
#18+
может мне нужно обновить билдер, может какието проблемы с виндой. Сейчас попробую винду преставить ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2008, 09:32 |
|
|
start [/forum/topic.php?fid=41&msg=35493431&tid=1587327]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
56ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 333ms |
total: | 494ms |
0 / 0 |