Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Убрать удалённые записи из таблицы FoxPro, Подскажите, плиз 
V
    Опции темы
AntiVirus
Дата 18.3.2006, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 16.3.2006
Где: Евпатория

Репутация: нет
Всего: нет



Кто подскажет, как программно убрать удалённые строки из таблицы FoxPro?
PM MAIL ICQ   Вверх
MFoxer
Дата 18.3.2006, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 18.1.2006

Репутация: -1
Всего: нет



Pack
PM MAIL   Вверх
AntiVirus
Дата 20.3.2006, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 16.3.2006
Где: Евпатория

Репутация: нет
Всего: нет



Цитата(MFoxer @ 18.3.2006, 23:58)
Pack

А если по конкретнее...
PM MAIL ICQ   Вверх
bas
Дата 20.3.2006, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 14.8.2002
Где: Молдова, Кишинев

Репутация: нет
Всего: 2



Кудауж конкретнее , Pack физически удаляет записи помеченые как удаленные.
PM MAIL   Вверх
AntiVirus
Дата 20.3.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 16.3.2006
Где: Евпатория

Репутация: нет
Всего: нет



Цитата(bas @ 20.3.2006, 14:11)
Кудауж конкретнее , Pack физически  удаляет записи помеченые как удаленные.

Я это всё прекрасно понимаю. А как быдет выглядеть SQL запрос на выполнение этой команды, или это отдельная утилита VFP, которая пакует БД?
PM MAIL ICQ   Вверх
sexton
Дата 20.3.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sexton=Пономарь (eng)
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 5.5.2004
Где: Ульяновск

Репутация: нет
Всего: 9



Это встроенный фоксовый метод! причем там SQL?
PM MAIL WWW ICQ   Вверх
AntiVirus
Дата 20.3.2006, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 16.3.2006
Где: Евпатория

Репутация: нет
Всего: нет



Цитата(sexton @ 20.3.2006, 17:20)
Это встроенный фоксовый метод! причем там SQL?

Я работаю с БД через ADOQuery, а там используются SQL запросы, по этому я про них и спросил. Но никто нифига так и не подсказал нормательно.
Кто делал такую фигню подскажите плиз.
PM MAIL ICQ   Вверх
bas
Дата 20.3.2006, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 14.8.2002
Где: Молдова, Кишинев

Репутация: нет
Всего: 2



Цитата(AntiVirus @ 20.3.2006, 17:33 Найти цитируемый пост)
Я работаю с БД через ADOQuery

Никак. Через BDE API без пролем.
PM MAIL   Вверх
AntiVirus
Дата 20.3.2006, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 16.3.2006
Где: Евпатория

Репутация: нет
Всего: нет



Цитата(bas @ 20.3.2006, 18:47)
Цитата(AntiVirus @  20.3.2006,  17:33 Найти цитируемый пост)
Я работаю с БД через ADOQuery

Никак. Через BDE API без пролем.

А есть какой-нить кусочек примерного исходника?
PM MAIL ICQ   Вверх
bas
Дата 22.3.2006, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 14.8.2002
Где: Молдова, Кишинев

Репутация: нет
Всего: 2



Код

Delete the current record.

If Pack is set to true and the cursor is open exclusively on a dBASE or FoxPro table, the table is packed. This example uses the following input:
    fDbiDeleteRecord(hdBASECur, pRecBuf, TRUE);

DBIResult fDbiDeleteRecord(hDBICur hTmpCur, pBYTE pTmpRecBuf, BOOL Pack)
{
   DBIResult        rslt;
   CURProps       CurProps;
   hDBIDb           hTmpDb;

   rslt = Chk(DbiDeleteRecord(hTmpCur, pTmpRecBuf));
   if (rslt != DBIERR_NONE)
      return rslt;
   if (Pack == TRUE)
   {
      rslt = Chk(DbiGetCursorProps(hTmpCur, &CurProps));
      if (rslt != DBIERR_NONE)
         return rslt;
   if (strcmp(CurProps.szTableType, szDBASE) == 0)
      {
         // Get the database handle from the cursor handle

         rslt = Chk(DbiGetObjFromObj(hTmpCur, objDATABASE, &hTmpDb));
         if (rslt != DBIERR_NONE)
            return rslt;
         rslt = Chk(DbiPackTable(hTmpDb, hTmpCur, NULL, NULL, TRUE));
      }
   }
   return rslt;
}

Код

Example 1: Pack a Paradox or dBASE table.

This example will pack a Paradox or dBASE table therefore removing already deleted rows in a table. This function will also regenerate all out-of-date indexes (maintained indexes). This example uses the following input:

  PackTable(Table1)

The function is defined as follows: 

// Pack a Paradox or dBASE table
// The table must be opened exclusively before calling this function...
procedure PackTable(Table: TTable);
var
  Props: CURProps;
  hDb: hDBIDb;
  TableDesc: CRTblDesc;
begin
  // Make sure the table is open exclusively so we can get the db handle...
  if not Table.Active then
    raise EDatabaseError.Create('Table must be opened to pack');
  if not Table.Exclusive then

    raise EDatabaseError.Create('Table must be opened exclusively to pack');

  // Get the table properties to determine table type...
  Check(DbiGetCursorProps(Table.Handle, Props));

  // If the table is a Paradox table, you must call DbiDoRestructure...
  if Props.szTableType = szPARADOX then begin
    // Blank out the structure...
    FillChar(TableDesc, sizeof(TableDesc), 0);
    // Get the database handle from the table's cursor handle...

    Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(hDb)));
    // Put the table name in the table descriptor...
    StrPCopy(TableDesc.szTblName, Table.TableName);
    // Put the table type in the table descriptor...
    StrPCopy(TableDesc.szTblType, Props.szTableType);
    // Set the Pack option in the table descriptor to TRUE...
    TableDesc.bPack := True;
    // Close the table so the restructure can complete...
    Table.Close;
    // Call DbiDoRestructure...

    Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False));
  end
  else
    // If the table is a dBASE table, simply call DbiPackTable...
    if (Props.szTableType = szDBASE) then
      Check(DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBASE, True))
    else
      // Pack only works on PAradox or dBASE; nothing else...
      raise EDatabaseError.Create('Table must be either of Paradox or dBASE ' +

        'type to pack');

  Table.Open;

end;

PM MAIL   Вверх
Cashey
Дата 22.3.2006, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


Профиль
Группа: Завсегдатай
Сообщений: 3441
Регистрация: 13.11.2002
Где: в столице

Репутация: 13
Всего: 60



Цитата(AntiVirus @ 20.3.2006, 18:56 Найти цитируемый пост)
А есть какой-нить кусочек примерного исходника?

Для Delphi, по моему, был пример в DRKB


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
MFoxer
Дата 24.3.2006, 03:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 18.1.2006

Репутация: -1
Всего: нет



Да, зачем вы так парня запугали. Правильный вопрос, допустим СА тож испрользует ADO и нет ничего удивительного, что человеку понадобилось заюзать ADO для доступа к данным VFР.
1) ADOQuery- ты хочешь поработь с БД ( DBC ) или табличками ( DBF ) фокса из C++ Builder, верно ? Вот так и нужно говорить. Выбор ADOQuery - прекрасно ( славо Богу, что не ADOStoredProc). Как я понимаю, соединение ты установил , тебе нужно почистить табличку, так ? Ну так и выполни команду "PACK" в качестве команды возвращающей скалярное выражение, но ! НАдеюсь ты использовал OLE DB Provider 8.0 или 9.0 ?
Ответь на эти вопросы. Я тебе подскажу как правильно сделать.

PM MAIL   Вверх
bas
Дата 25.3.2006, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 446
Регистрация: 14.8.2002
Где: Молдова, Кишинев

Репутация: нет
Всего: 2



Цитата(MFoxer @ 24.3.2006, 03:16 Найти цитируемый пост)
Ответь на эти вопросы. Я тебе подскажу как правильно сделать.

Меня этот вопрос мучает уже года три, если не больше.
Как?
Цитата(MFoxer @ 24.3.2006, 03:16 Найти цитируемый пост)
НАдеюсь ты использовал OLE DB Provider 8.0 или 9.0 ?

А если нет выше названных провайдеров?
PM MAIL   Вверх
AntiVirus
Дата 26.3.2006, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 16.3.2006
Где: Евпатория

Репутация: нет
Всего: нет



Цитата(MFoxer @ 24.3.2006, 03:16)
1)  ADOQuery-  ты хочешь поработь с БД ( DBC ) или табличками ( DBF ) фокса из C++ Builder,  верно ? Вот так и нужно говорить.  Выбор ADOQuery  -  прекрасно ( славо Богу, что не ADOStoredProc). Как я понимаю, соединение ты установил , тебе нужно почистить табличку, так ?  Ну так и выполни команду "PACK"  в качестве команды возвращающей скалярное выражение, но ! НАдеюсь ты использовал OLE DB Provider 8.0  или 9.0 ?
Ответь на эти вопросы.  Я тебе подскажу как правильно сделать.

Честно, я даже незнаю какая у меня версия провайдера стоит, но всё равно подскажи пожалуйста. Жду с нетерпением.
И еще. Я работаю с Delphi, а не с C++, но это не столь важно. Если есть код на Билдере, давай его, разберусь, проблем с этим нет. С ADOQuery на Билдере тоже работал.
PM MAIL ICQ   Вверх
MFoxer
Дата 28.3.2006, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 18.1.2006

Репутация: -1
Всего: нет



Отвечаю:
Реальный пример работы с таблицами ( а при Вашем желании и базами данных) Visual FoxPro:
1) Сам ради интереса поюзал ADOQUERY - косяк, никак не возможно выполнить такую фичу, он ( как я понял) по замыслу возвращает множества или скалярные величины. Нас это не устраивает.
2) Выход есть. Использовать ADOCommand.
3) Живой пример:
Код
 TADOCommand *DBFADOCommand;
DBFADOCommand->ConnectionString = "Provider=VFPOLEDB.1;Data Source=C:\\ADOTest;Mode=ReadWrite;Password="";Collating Sequence=MACHINE";
DBFADOCommand->CommandText ="EXECSCRIPT([SET DELETE OFF]+chr(13)+[USE GLINE EXCLUSIVE]+chr(13)+[PACK IN GLINE])";
DBFADOCommand->Execute();


Немного пояснений, очевидных и неочень:
1) C:\\ADOTest - это мой каталог с табличками, у вас он может быть другим
2) В конструкции скриптов, типа этой:
"EXECSCRIPT([SET DELETE OFF]+chr(13)+[USE GLINE EXCLUSIVE]+chr(13)+[PACK IN GLINE])";
Нужно запомнить, что:
EXECSCRIPT - выполняет все что написано внутри;
SET DELETE OFF - извещает OLE DB VFP движок, что нужно смотреть все и помеченные и непомеченные ( в данном случае не актуально )
USE GLINE EXCLUSIVE - открывает таблицу по пути "C:\\ADOTest",( у вас она ясное дело другая) в режиме монопольного доступа ( только в таком режиме работает следующая команда)
PACK IN GLINE - вот то что убрало все помеченные на удаление записи
3) Все командны в [] или ' '
4) Все команды должны быть разделены фоксовской командой переводом каретки chr(13)
5)VFP OLE DB Provider последней версии можно скачать на сайте мелкомягких абсолютно бесплатно :
VFP OLE DB 9.0 SP1
Удачи.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Foxpro/Clipper/Dbase"
MoLeX

Запрещается!

1. Публиковать ссылки для чисто рекламных целей.

2. Оффтопить, флеймить, говорить не культурно.

Пожалуйста, адекватно задавайте свой вопрос. Тема должна создаваться с названием характеризующем Вашу проблему.

Задавайте вопросы правильно - как спросите, так вам и ответят.

Разрешено!

Давать ссылки на статьи, обзоры, если это не нарушает первый пункт правил.

Задавая вопрос, давайте нужную информацию касающуюся Вашей проблемы. Этим вы ускорите полезные ответы.

P.S. Размещение рекламы будет строго наказываться!



Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MoLeX

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Foxpro/Clipper/Dbase | Следующая тема »


 




[ Время генерации скрипта: 0.0531 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.