Страница 12 из 13
Ошибка при подключении к Access через ADOПри подключении к Access через ADO при запуске проекта под IDE возникает ошибка:
Project Project1.exe raised exception class EVariantTypeCastError with message 'Could not convert variant of type (Null) into type (String)'. Process stopped. Use Step or Run to continue.
Это проблема в драйвере базы данных и есть два варианта решения данной проблемы:
1. Ничего не предпринимать, оставить как есть. Ошибка возникает только при запуске приложения под IDE - и при обычном запуске никакого сообщения об ошибке выдано не будет, приложение будет функционировать нормально. 2. Сменить драйвер доступа к БД: вместо ODBC надо использовать Jet 4.0.
Медленно работает TADODataSet->Open()Симптомы: при открытии таблицы с несколькими десятками тысяч записей, находящейся в файле БД Access, с помощью TADODataSet->Open() перестают обрабатываться сообщения окна, все тормозит. Полностью операция открытия завершается через 10-20 секунд. Что можно сделать?
Решение: перед открытием таблицы необходимо отключить все вычисляемые поля, в TADODataSet->ExecuteOptions выставить eoAsyncExecute в true, и после завершения открытия таблицы в обработчике события AfterOpen TADODataSet перерисовать элементы управления для отображения данных (вызывать TDBGrid->Refresh(), например).
Перечисление принтеровКод перечисляет все принтеры и выводит данные о них в Мемо:
PRINTER_INFO_2 *Pr; DWORD byteNeed = 0,prCount=0;//Кол-во необходимых байт, количество принтеров //Делаем первый вызов с буфером NULL, чтоб узнать нужный размер буфера EnumPrinters(PRINTER_ENUM_CONNECTIONS|PRINTER_ENUM_LOCAL,NULL,2,NULL,0,&byteNeed,&prCount); //Создаем буфер Pr = new PRINTER_INFO_2 [byteNeed]; //Делаем второй вызов уже с нужным буфером if(EnumPrinters(PRINTER_ENUM_CONNECTIONS|PRINTER_ENUM_LOCAL,NULL,2,(LPBYTE)Pr,byteNeed,&byteNeed,&prCount)) { for(int i = 0; i < prCount; ++i) { Memo1->Lines->Add("Printer*************"); Memo1->Lines->Add("Имя: " + AnsiString(Pr[i].pPrinterName)); Memo1->Lines->Add("Порт: " + AnsiString(Pr[i].pPortName)); Memo1->Lines->Add("Драйвер: " + AnsiString(Pr[i].pDriverName)); Memo1->Lines->Add(""); } } delete Pr;
Как импортировать данные из текстового файла в Excel?Для импорта данных в Excel из текстового файла разместите компонент TExcelApplication (ExcelApplication1) на форме и воспользуйтесь следующим кодом:
ExcelApplication1->Connect(); ExcelApplication1->Visible[0]=true; ExcelApplication1->Workbooks->_OpenText(StringToOleStr("c:\\1.txt"), xlWindows, 1, xlDelimited, xlDoubleQuote, false, false, false, true, false, false, false, TNoParam(), TNoParam(), TDefLCID());
Данный код импортирует данные из файла 1.txt, расположенного на диске С.
Как получить список активных процессов?Для получения списка активных процессов воспользуйтесь следующей функцией:
//--------------------------------------------------------------------------- // Получить список активных просессов // возврат: заполняет список информацией вида // Win2k // [SYSTEM PROCESS] // SYSTEM // SERVICES.EXE // MIRANDA32.EXE // BCB.EXE // // Win98 // C:\WINDOWS\SYSTEM\KERNEL32.DLL // C:\WINDOWS\SYSTEM\MSGSRV32.EXE // C:\WINDOWS\SYSTEM\SPOOL32.EXE // //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #include <tlhelp32.hpp>
PACKAGE void __fastcall GetActiveAppList (TStringList *slist) { if (!slist) return;
slist->Clear();
TProcessEntry32 prj; prj.dwSize = sizeof(PROCESSENTRY32);
HANDLE hss = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0); if (((int)(hss)) == (-1)) return;
AnsiString fname; try { for (bool loop = Process32First(hss, &prj); loop; loop = Process32Next(hss, &prj)) { fname = AnsiString(prj.szExeFile).Trim().UpperCase(); if (fname.IsEmpty()) continue; slist->Add(fname); } } // try catch (...) { slist->Clear(); }
CloseHandle(hss); }
//---------------------------------------------------------------------------
void __fastcall TF_Main::BitBtn1Click(TObject *Sender) { TStringList *slist = new TStringList(); try { GetActiveAppList(slist); Mem_Info->Lines->Text = slist->Text; } __finally { delete slist; } } //---------------------------------------------------------------------------
|