Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Pack table для формата dbf / 25 сообщений из 54, страница 1 из 3
15.09.2005, 14:04
    #33271241
Lora__k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Всем привет!
В Database Explorer есть опция Pack table, а можно ли её вызвать во время выполнения программы?
...
Рейтинг: 0 / 0
15.09.2005, 15:11
    #33271491
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Lora__kВсем привет!
В Database Explorer есть опция Pack table, а можно ли её вызвать во время выполнения программы?
Вызвать-то ее можно... Вот только будет ли она работать...
Для того, чтобы таблицу упаковать (удалить записи, помеченные как удаленные) таблица должна находиться в монопольном доступе. Если кто-то (программа, другой пользователь) уже открыл таблицу, то упаковка будет невозможна, так как не удастся обеспечить монопольный доступ...
...
Рейтинг: 0 / 0
15.09.2005, 15:50
    #33271621
Lora__k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Станислав C.
Для того, чтобы таблицу упаковать (удалить записи, помеченные как удаленные) таблица должна находиться в монопольном доступе. Если кто-то (программа, другой пользователь) уже открыл таблицу, то упаковка будет невозможна, так как не удастся обеспечить монопольный доступ...
Да, я об этом знаю, но это уже следующий вопрос...

Станислав C.
Вызвать-то ее можно... Вот только будет ли она работать...
Как? Буду очень благодарна, если подскажешь :)
...
Рейтинг: 0 / 0
15.09.2005, 15:56
    #33271645
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Если доступ через БДЕ, то поищи на дельфийном форуме, там было точно, недавно
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
15.09.2005, 16:08
    #33271676
Lora__k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Карабас БарабасЕсли доступ через БДЕ, то поищи на дельфийном форуме, там было точно, недавно
Posted via ActualForum NNTP Server 1.3
Нет, пишу на Visual C++, используя ODBC
...
Рейтинг: 0 / 0
15.09.2005, 16:11
    #33271688
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Вот, для акцеса, может по аналогии ?

Код: 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.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
#include <odbcinst.h>
bool TADOAccessLink::CompressBase(bool ShowError)
{
  BOOL INSTAPI (*SQLConfigDataSource)(
    HWND    hwndParent,
    WORD    fRequest,
    LPCSTR  lpszDriver,
    LPCSTR  lpszAttributes);

  RETCODE (*SQLInstallerError)(
    WORD     iError,
    DWORD *     pfErrorCode,
    LPSTR     lpszErrorMsg,
    WORD     cbErrorMsgMax,
    WORD *     pcbErrorMsg);

  HANDLE hL=LoadLibrary("odbccp32.DLL");
  if (hL==NULL) return  0 ;

  (void*)SQLInstallerError=GetProcAddress(hL,"SQLInstallerError");
  (void*)SQLConfigDataSource=GetProcAddress(hL,"SQLConfigDataSource");

  try
  {
    if (SQLConfigDataSource==NULL) return  0 ;

    AnsiString File1=FBaseName;
    AnsiString File2=FBaseName+".tmp";

    AnsiString str="COMPACT_DB=\""+File1+"\" "+File2;

    char p3[ 1000 ];
    char p4[ 1000 ];

    strcpy(p3,"Microsoft Access Driver (*.mdb)");
    strcpy(p4,str.c_str());

    bool r=SQLConfigDataSource( 0 , 4 ,p3,p4);

    if (r)
    {
      if (!DeleteFile(File1))
      {
        if (ShowError) ShowMessage("=х ьюу? ?фрыш?? ?рщы '"+File1+"'");
      }
      if (RenameFile(File2,File1)) return  1 ;
      else
      {
        int erc=GetLastError();
        if (ShowError) ShowMessage(SysErrorMessage(erc));
        return  0 ;
      }
    }
    else
    {
      if (!ShowError) return  0 ;
      if (SQLInstallerError==NULL) return  0 ;

      DWORD erc;
      WORD pers;
      char ers[ 1001 ];
      SQLInstallerError( 1 ,&erc,ers, 1000 ,&pers);

      ShowMessage(ers);

      return  0 ;
    }
  }
  __finally
  {
    FreeLibrary(hL);
  }
  return  1 ;
}

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
15.09.2005, 16:37
    #33271777
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Как? Буду очень благодарна, если подскажешь :)
Как-как - читает все записи из исходного файла и записывает в выходной только те, у которых нет пометки "удаленная".
...
Рейтинг: 0 / 0
15.09.2005, 16:48
    #33271815
Lora__k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
MasterZivКак-как - читает все записи из исходного файла и записывает в выходной только те, у которых нет пометки "удаленная".
Это тоже вариант, только вот как достучаться до этой пометки?
...
Рейтинг: 0 / 0
15.09.2005, 16:59
    #33271868
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
млин, я для чего пример с SQLConfigDataSource показал ?
...
Рейтинг: 0 / 0
15.09.2005, 17:02
    #33271880
Lora__k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Карабас Барабасмлин, я для чего пример с SQLConfigDataSource показал ?
С ним я сейчас и разбираюсь, но пока не получается :)
...
Рейтинг: 0 / 0
16.09.2005, 06:39
    #33272423
Станислав C.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Карабас Барабас
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
...
    AnsiString File1=FBaseName;
    AnsiString File2=FBaseName+".tmp";

    AnsiString str="COMPACT_DB=\""+File1+"\" "+File2;
...
    strcpy(p4,str.c_str());
...
      ShowMessage(ers);

Я, конечно, дико извиняюсь... Но разве AnsiString и ShowMessage не "привилегия" Билдера ?
...
Рейтинг: 0 / 0
16.09.2005, 06:43
    #33272429
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Станислав C.разве AnsiString и ShowMessage не "привилегия" Билдера ?
разумеется да !
код бильдеровский, но суть-то не меняется, вызываются функции ODBC
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
16.09.2005, 14:52
    #33273829
Lora__k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Карабас Барабас! Как я понимаю, упаковка прозводится при вызове функции SQLConfigDataSource, с командой COMPACT_DB. Так?
Я делаю следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
bool b = SQLConfigDataSource(NULL,  4 , "Driver do Microsoft dBase (*.dbf)", "COMPACT_DB=c:\\work\\dbfWork\\freq.dbf c:\\work\\dbfWork\\freq.dbf");
	if (!b)
	{
		CString strErrorMsg;
		for (int i =  1 ; i <=  8 ; i++)
		{
			WORD cbErrorMsg;
			DWORD dwErrorCode;
			RETCODE r = SQLInstallerError(i, &dwErrorCode, strErrorMsg.GetBuffer( 100 ),  100 , &cbErrorMsg);
			if (r == SQL_NO_DATA)
				break;
			strErrorMsg.ReleaseBuffer(cbErrorMsg);
			AfxMessageBox((const char *) strErrorMsg);
		}
	}
	else AfxMessageBox("Repair succeeded!");

SQLInstallerError ругается "Недопустимый источник данных".
Я что-то делаю не так?
Или может быть COMPACT_DB работает только для акцеса?
...
Рейтинг: 0 / 0
16.09.2005, 14:56
    #33273846
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Lora__kможет быть COMPACT_DB работает только для акцеса?тут я не помошник, потому как не пробовал эту функцию больше ни с чем, только с акцесом. Может на МСДН поищешь ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
16.09.2005, 15:23
    #33273978
Lora__k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Карабас БарабасМожет на МСДН поищешь ?


Да я там и искала. Все примеры с COMPACT_DB именно для акцесовских баз. Твои ODBC-ишные функции работают и для вижуала, да только боюсь, что не применимо к dbf-формату.
Надо искать что-то ещё.
Но в любом случае спасибо :)
...
Рейтинг: 0 / 0
16.09.2005, 15:28
    #33274009
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Lora__kДа я там и искала. Все примеры с COMPACT_DB именно для акцесовских баз. Твои ODBC-ишные функции работают и для вижуала, да только боюсь, что не применимо к dbf-формату.
Надо искать что-то ещёможет драйвер другой попробовать ?
Lora__kВ Database Explorer есть опция Pack tableон ведь как-то делает ! значит есть стандартный способ.

PS: запрос типа insert into newtable select ... form oldtable не проканает ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
16.09.2005, 15:38
    #33274058
Lora__k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Карабас Барабасможет драйвер другой попробовать ?
Сейчас попробую, хотя я нормально работаю с dbf через него...

Карабас Барабас Lora__kВ Database Explorer есть опция Pack tableон ведь как-то делает ! значит есть стандартный способ.
В том-то и дело!

Карабас БарабасPS: запрос типа insert into newtable select ... form oldtable не проканает ?
это идея :) попробую, спасибо, потом напишу что получится :)
...
Рейтинг: 0 / 0
19.09.2005, 10:50
    #33276091
Alex_VC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Я делал через com- интрефейс DAO. Примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
#import <DAO360.DLL>  rename ("EOF","daoEOF") rename("Recordset","daoRecordset")\
         rename("dbLangGeneral","_dbLangGeneral") rename("dbFreeLocks","_dbFreeLocks")\
         rename("dbFailOnError","_dbFailOnError") rename("dbOpenDynaset","_dbOpenDynaset")\
         rename("dbOpenTable","_dbOpenTable") rename("_DAO","__DAO")\
         rename("DataTypeEnum","_DataTypeEnum"),rename("Connection","__Connection")\
         rename("dbEncrypt","_dbEncrypt") rename_namespace("dao20")
...

 _DBEnginePtr dbe;
 try{
    HRESULT hr=dbe.CreateInstance(__uuidof(DBEngine));
  if(FAILED(hr)){
     _com_issue_error(hr);
     return;
   hr=dbe->CompactDatabase(_bstr_t(szOldDB),_bstr_t(szNewDB),_variant_t((bool) 0 ),_variant_t((long) 2 ),_variant_t(szPwd)); 

  }
  catch(_com_error& e) {
    ....
    dbe.Release();

}
...
Рейтинг: 0 / 0
19.09.2005, 14:21
    #33276708
Lora__k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Карабас Барабас!
Карабас Барабас
может драйвер другой попробовать ?
Без разницы какой драйвер. через этот и многие другие подключается нормально, а если подсовываешь левый какой-нибудь, то ругается "Компонент не найден в реестре"
Так что похоже "Недопустимый источник данных" - это как раз формат *.dbf
Карабас Барабас
PS: запрос типа insert into newtable select ... form oldtable не проканает ?
Запрос "SELECT INTO newtable FROM oldtable" создает newtable, а затем переписывает туда все записи из oldtable, к сожалению и помеченные на удаление :-(
Как бы до этой пометки достучаться?!

Alex_VC!
Alex_VCЯ делал через com- интрефейс DAO. Примерно так:
Примерно тоже самое, функция CompactDatabase прекрасно работает для формата *.mdb, а на *.dbf ругается...

Спасибо всем за участие, но это все не то!
Можно конечно перегонять dbf в mdb, потом упаковывать, и назад, но уж очень не хочется... Тем более если В Database Explorer есть опция Pack table, то все это должно делаться как-то просто!!!
...
Рейтинг: 0 / 0
19.09.2005, 15:41
    #33276988
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Lora__kКарабас Барабас

PS: запрос типа insert into newtable select ... form oldtable не проканает ?

Запрос "SELECT INTO newtable FROM oldtable" создает newtable, а затем переписывает туда все записи из oldtable, к сожалению и помеченные на удаление
Это немного другой запрос. А озвученный мной запрос не проходит ? (просто нету пока возможности самому попробовать)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
19.09.2005, 16:44
    #33277203
Lora__k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Карабас БарабасЭто немного другой запрос. А озвученный мной запрос не проходит ? (просто нету пока возможности самому попробовать)
Нет, не проходит. Оба запроса переписывают все (в том числе и помеченные на удаление) записи из старой таблицы в новую.
Похоже придется разбираться со структурой dbf файлов, там есть байт, который содержит флаг удаления для каждой записи, его и проверять, короче работать напрямую с файлами...
...
Рейтинг: 0 / 0
19.09.2005, 16:53
    #33277233
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Я бы уже задумался о переходе на какой-нибудь SQL-сервер :)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
19.09.2005, 17:12
    #33277289
Lora__k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Чем в данный момент и занимаемся :)
Просто до сих пор работали с dbf форматом, а теперь переходим на на FireBird, в сзвязи с чем надо dbf конвертить в gdb...
...
Рейтинг: 0 / 0
19.09.2005, 17:24
    #33277317
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Lora__kпереходим на на FireBird, в сзвязи с чем надо dbf конвертить в gdb
если ФБ, то расширение советую сменить на FDB, меньше будет проблем :)
и еще вот сюда сходи: http://www.sql.ru/forum/actualthread.aspx?tid=217085
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
19.09.2005, 17:38
    #33277344
Lora__k
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Pack table для формата dbf
Карабас Барабасесли ФБ, то расширение советую сменить на FDB, меньше будет проблем :)
Хорошо, спасибо за совет, я об этом подумаю :)

Карабас Барабаси еще вот сюда сходи: http://www.sql.ru/forum/actualthread.aspx?tid=217085
Тоже спасибо, завтра поразбираюсь :)
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Pack table для формата dbf / 25 сообщений из 54, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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