C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Invalid OMF record, type 0x21 (possibly COFF)
spiller
Отправлено: 19.10.2006, 22:55


Ученик-кочегар

Группа: Участник
Сообщений: 27



Всем привет!
Понадобилось мне в прожке получить список всех источников ODBC на машине.
Нашел нормальную ссылку:
http://www.codenet.ru/db/other/odbc/
Но только не задача, когда пытаюсь скомпилировать проект, то получаю
QUOTE

 [Linker Error] 'C:\PROGRAM FILES\BORLAND\CBUILDER6\PROJECTS\DSN_LISTBOX\MYODBC3.LIB' contains invalid OMF record, type 0x21 (possibly COFF)


Нашел ссылку:
click
та господин Gedeon дает пояснения

первый вариант(просто обработать lib файл утилитой coff2omf.exe не помог
а во втором мне не понятно где брать файл опрелений .def?

Help please!
spiller
Отправлено: 19.10.2006, 23:56


Ученик-кочегар

Группа: Участник
Сообщений: 27



Разобрался
Также необходимо получить список установленных драйверов..
Вот такой код нашел:
CODE



   unsigned short wdMaxSize = 255;
   unsigned short wdOut;
   AnsiString drname;

   char Buffer[256];
   char *pszBuf = Buffer;

   if(!SQLGetInstalledDrivers(Buffer, wdMaxSize, &wdOut))     return;
   do
   {
      drname = (AnsiString)((char *)pszBuf);     // Получаем имя каждого драйвера
      pszBuf = strchr( pszBuf, '\0' ) + 1;    // Проверяем на NULL
      ListBox2->Items->Add(drname);
   }
   while( pszBuf[1] != '\0' );


Кстати, если я установил на машина Mysql ODBC Driver, то можно ли из программы вызвать его форму создания DSN?
Думаю сделать как-нибудь через WinExec... Вот только как найти исполняемый файл...

Отредактировано spiller — 20.10.2006, 00:56
AVC
Отправлено: 20.10.2006, 08:24


Ветеран

Группа: Модератор
Сообщений: 1583



CODE

//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//
// Заполнить список пар ODBCName, drivername из системного реестра
// по ключу HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources
// Отсортитрован по ODBCName
// odbclist -> Code N: п/п от 1
//    Name ODBC_Name
//    Mnemo Driver_Name
//    Name1 "ODBC_Name (Driver_Name)"
//- — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - — - -

PACKAGE void __fastcall GetODBCList (TTinyPrompt *odbclist)
{
if (!odbclist) return;

TStringList *slist = new TStringList();
AnsiString drvname;

AnsiString regkey = "\Software\ODBC\ODBC.INI\ODBC Data Sources";
TRegistry *reg = new TRegistry();

odbclist->Clear();
try {
reg->RootKey = HKEY_CURRENT_USER;
if (reg->OpenKey(regkey,false))
{ reg->GetValueNames(slist);

slist->Sorted = true;
for (int i = 0; i < slist->Count; i++)
 { drvname = reg->ReadString(slist->Strings[i]);
 odbclist->Add(i+1, slist->Strings[i], drvname,
     0, slist->Strings[i]+ " (" + drvname + ")"
     );
 }

reg->CloseKey();
}

} // try
catch (Exception &xcp) { ShowMessage (xcp.Message); }

delete reg;
delete slist;
}

TTinyPrompt *odbclist это список структур. Нужно будет заменить на что-то свое.

Вернуться в Работа с базами данных в C++Builder