Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / с++builder foxpro / 25 сообщений из 25, страница 1 из 1
14.08.2008, 13:04
    #35487364
tigr1945
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
Провайдер VFPOLEDB.1
Есть таблица
дата
время1
время2
номер
флаг1
флаг2

Есть старая программа котрая пишет данные в этот файл.
алгоритм такой
если есть время1 то я переношу из А в базу Б и ставлю в А флаг1
затем проходит некоторое время и в базу добавляется данные
снова запрос к А появилось время2 мне нужно перенести в базу 2 это время и обновить флаг2 в базе А
Но тут начинаются фокусы update не обновляет флаг 2
Я делаю точно такой же select и он мнн возвращает строку (которую должен обновить update)
если сделать реконект то update отрабатывает успешно

Еще заметил что если работать на лок машине то работеет сразу а если по сети то такая ошибка
если у когто есть идеи то могу выстать исходники и прочее
для связи
скайп tigr1234
ася ICQ#: 320-006-278
...
Рейтинг: 0 / 0
14.08.2008, 13:10
    #35487383
с++builder foxpro
tigr1945Но тут начинаются фокусы update не обновляет флаг 2

Это такое сообщение об ошибке? А на какую команду? А по aerror что получено?
...
Рейтинг: 0 / 0
14.08.2008, 13:32
    #35487453
tigr1945
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
ни каких сообщений нет просто update не отрабатывает т.е он не обновляет записи
...
Рейтинг: 0 / 0
14.08.2008, 13:33
    #35487459
с++builder foxpro
tigr1945ни каких сообщений нет просто update не отрабатывает т.е он не обновляет записи
А что насчет Aerror(). Как проверялось "необновление"?
...
Рейтинг: 0 / 0
14.08.2008, 15:48
    #35487943
tigr1945
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
Проверял dbviev тоесть. и другой програмоой ничего не обновляет
...
Рейтинг: 0 / 0
18.08.2008, 16:44
    #35493076
tigr1945
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
Вобщем в продолжение если я использую провайдера
Provider=VFPOLEDB.1 не обновляет запись как писалось раньше
если
Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c:\mydbpath;
работает но медленно
У таблицы есть индекс CDX

Мне кажется что не используется индексы

База фокспро 2,6
...
Рейтинг: 0 / 0
18.08.2008, 17:34
    #35493240
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
Взято отсюда

How to: Access Visual FoxPro Data in Visual Studio

VFP9
Код: plaintext
1.
2.
oConn = CREATEOBJECT("ADODB.Connection")
oConn.ConnectionString = "provider=vfpoledb.1;data source=.\MyTestDatabase.dbc"
oConn.Open

...

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 параметр строки подключения. Он определяет, можно ли вносить изменения или доступ только на чтение. Какое значение использовал у себя?
...
Рейтинг: 0 / 0
18.08.2008, 17:37
    #35493251
tigr1945
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
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"

то работает но медленно
...
Рейтинг: 0 / 0
18.08.2008, 17:40
    #35493263
tigr1945
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
Provider=VFPOLEDB.1;Data Source=\\server_k\base;Mode=ReadWrite;Password="";Collating Sequence=MACHINE

вот как было
...
Рейтинг: 0 / 0
18.08.2008, 18:10
    #35493360
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
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. Т.е. ты модификацию сделаешь, а рабочее приложение их "не увидит" или вообще откажется работать.
...
Рейтинг: 0 / 0
18.08.2008, 18:32
    #35493423
tigr1945
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
Если не сложно стукни в аське
320-006-278
скайп tigr1234
или скажи как связаться с тобой,

у меня получается что
я первый раз запустил у меня вычетала прога 1 сроку в базу В
в базу А я пометил что перенес время 1
затем 2 програма вписывает время 2
я снова делаю запрос (на одном и томже сооединении)
у меня показывает что меремя добавило, я переношу время 2 В базу В (обновляю запись это работает)
и мене нужно обновить флаг времени 2 в базе А но запрос отрабатывает
...
Рейтинг: 0 / 0
18.08.2008, 18:36
    #35493431
tigr1945
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
и не обновляет флаг, делаю в этомже адоквери точно с такими же параметрами 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
разницы нет но не обновляет
...
Рейтинг: 0 / 0
18.08.2008, 19:08
    #35493492
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
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
update otm set flag_out= 1  where date={^ 2008 - 08 - 08 } and time_i= 7 . 03  and time_o= 7 . 30 

Если поля time_i и time_o - это поля типа Numeric, то попробуй еще такой синтаксис

Код: plaintext
update otm set flag_out= 1  where date={^ 2008 - 08 - 08 } and time_i=ROUND( 7 . 03 , 2 ) and time_o=ROUND( 7 . 30 , 2 )
...
Рейтинг: 0 / 0
18.08.2008, 19:31
    #35493512
tigr1945
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
мне кажется что синтаксис тут в норме
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;
}
...
Рейтинг: 0 / 0
18.08.2008, 19:39
    #35493522
tigr1945
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
Просто не может 1 и тотже код рабоать по пазному ведь после реконекта отрпбатывает обновления флага 2
...
Рейтинг: 0 / 0
18.08.2008, 20:19
    #35493563
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
Непосредственно перед ExecSQL() я бы проверил как строку запроса, так и записанные значения параметров. В трассировке. Т.е. не предположения типа "там должно быть", а что есть на самом деле. Не получается ли так, что передаются не те параметры или не совсем та срока запроса?

Поскольку модифицируется те данные, которые не участвуют в отборе записей, то, скорее всего, проблема именно в значении параметров или строки запроса.

Кстати, реконнект делается в этой же процедуре или в другой? А вариант с последовательным Select + Update как делал? В одной и той же процедуре или две разных?
...
Рейтинг: 0 / 0
18.08.2008, 20:49
    #35493601
tigr1945
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
да проверял в дебагере все тоже самое.
делал и с параметрами, и просто запрос тот который я приводил.
результат один и тотже.
...
Рейтинг: 0 / 0
18.08.2008, 21:44
    #35493651
tigr1945
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
просто на форме, функция
Код: 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.
  Form1->Cursor=crSQLWait;
   if(flag_con)
 {
   //Kon_serv->Caption="Старт";
    end_con();
    prn_log("Соединение прерванно",false, 2 );
 }
 else
 {
  // Kon_serv->Caption="Стоп";

   Mod->Server->ConnectionString="FILE NAME="+path+"\/server.udl";
  // Mod->Server->ConnectionString="FILE NAME="+path+"\/import.udl";
   Mod->Client->ConnectionString="FILE NAME="+path+"\/client.udl";
   Mod->Server->Connected=true;
   Mod->Client->Connected=true;
   flag_import=false;

   N7->Enabled=true;
   N8->Enabled=true;
   flag_con=true;
   N6->Caption="Стоп";
   prn_log("Соединение устанновленно",false, 2 );
 }
   Form1->Cursor=crDefault;
...
Рейтинг: 0 / 0
18.08.2008, 21:45
    #35493655
tigr1945
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 end_con()    // завершить соединение
 {
   Mod->Server->Connected=false;
   Mod->Client->Connected=false;
   Mod->Import->Connected=false;
   flag_con=false;
   Form1->Timer1->Enabled=false;
   flag_import=false;
   Form1->N7->Enabled=false;
   Form1->N8->Enabled=false;
   Form1->N7->Caption="Копия автоматом";
   Form1->N7->Checked=false;
   Form1->N6->Caption="Старт";
   Form1->StatusBar1->Visible=false;
   return true;
 }

...
Рейтинг: 0 / 0
19.08.2008, 11:56
    #35494368
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
Если просто установить задержку перед последним Update (не менее 5 секунд) обновление проходит?
...
Рейтинг: 0 / 0
19.08.2008, 12:15
    #35494456
tigr1945
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
Попробывал, все по прежнему.
А вообще эта функция работала. но что я наделал понять не могу.
Или ПК, или мои руки
...
Рейтинг: 0 / 0
19.08.2008, 12:17
    #35494469
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
Насколько я вижу, у теб 3 соединения. Не перепутал случайно на последнем Update?
...
Рейтинг: 0 / 0
19.08.2008, 12:45
    #35494562
tigr1945
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
вобщем заметил еще одно если в на одном квери выполнить сначала запрос
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
     AnsiString sql_txt="";
       sql_txt="update otm set flag_out=1 where date={08.08.2008} and time_i=ROUND(7.03,2) and time_o=ROUND(7.30,2)";

       Mod->ClientFlags->Close();
       Mod->ClientFlags->SQL->Clear();
       Mod->ClientFlags->SQL->Add(sql_txt);
       Mod->ClientFlags->ExecSQL();

то код отрабатывет

Код: 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.
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")->DataType=ftFloat;
       Mod->ClientFlags->Parameters->ParamByName("tout")->NumericScale= 2 ;
       Mod->ClientFlags->Parameters->ParamByName("tout")->Value  =Mod->GetData->Fields->FieldByName("time_o")->AsFloat;
     }

       Mod->ClientFlags->ExecSQL();
       return true;
  }



Получается что чтото остается в запросе что мешает что бы он нормально отрабатывал
...
Рейтинг: 0 / 0
27.08.2008, 09:32
    #35507747
tigr1945
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
может мне нужно обновить билдер, может какието проблемы с виндой. Сейчас попробую винду преставить
...
Рейтинг: 0 / 0
01.09.2008, 12:19
    #35515752
tigr1945
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
с++builder foxpro
Добрый день вообщем так все проблема и осталась.
если ктото поможет готов заплатить за помощь
http://tigr1945.jino.ru/zend.rar файл проекта
ICQ#: 32000627(восем)
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / с++builder foxpro / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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