Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi

Модерирует : ShIvADeSt

ShIvADeSt (20-04-2006 01:53): http://forum.ru-board.com/topic.cgi?forum=33&topic=6679#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

   

SergeyReutov



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я соеденяюсь с базой данных MSAccess XP при помощи компонентов ADOConnection и ADOTable. Использую Microsoft Jet 4.0 OLE DB Provider.  
Проблема в том, что когда я пытаюсь выполнить поиск:
DataModule1.ADOTable1.Seek('15',soFirstEQ);
система выдает ошибку: "Текущий проводник не поддерживает необходимый интерфейс для функции Index".
Формат индексного поля, по которому я пытаюсь выполнить поиск - integer.  
В чем может быть проблема?

Всего записей: 171 | Зарегистр. 23-01-2003 | Отправлено: 09:00 15-07-2005
Rasa



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Попробуй посмотри здесь
 
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=31684

Всего записей: 230 | Зарегистр. 30-08-2003 | Отправлено: 09:26 15-07-2005
MICROPOM



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всё получилось. Всем большое спасибо!!!
 
Добавлено:
А как в делфе запустить внешнее приложение?
Например Файл .com

Всего записей: 30 | Зарегистр. 23-11-2004 | Отправлено: 10:14 15-07-2005
PowerChute



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MICROPOM
 
 ShellExecute(Handle, nil, 'C:\Program Files\Loger.exe', nil, nil, SW_SHOW);
 
 

Всего записей: 520 | Зарегистр. 13-10-2004 | Отправлено: 10:19 15-07-2005
SergeyReutov



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я пытаюсь выполнить следующий запрос:
DataModule1.ADOQuery1.Active:=False;
DataModule1.ADOQuery1.SQL.Clear();
DataModule1.ADOQuery1.SQL.Add('update Cell');
DataModule1.ADOQuery1.SQL.Add('set Cell.u2=77');
DataModule1.ADOQuery1.SQL.Add('Where Cell.u1=7');
DataModule1.ADOQuery1.Active:=True;
 
При этом возникает ошибка: "Текущий проводник не поддерживает возврат нескольких наборов записей в результате одной операции" и "ADOQuery1: CommandText does not return a result set".
 
Но запрос всеравно выполняется. Тоже самое происходит и при попытке удаления записи, т.е. возникают те же ошибки, но запись удаляется. В чем может быть причина появления этих ошибок?

Всего записей: 171 | Зарегистр. 23-01-2003 | Отправлено: 11:11 15-07-2005
MICROPOM



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
PowerChute

Цитата:
ShellExecute(Handle, nil, 'C:\Program Files\Loger.exe', nil, nil, SW_SHOW);  

 
А как его описать? Прости за неграмотность, я только начал.
 
 
Добавлено:
А всё нашёл, ShellAPI. Спасибо.
 
Добавлено:
PowerChute
 
А если этот фаил находится в каталоге с ЕХЕшником? И я хочу сделать так
ShellExecute(Handle, nil, ExtractFilePath(Application.ExEName)+'123.com', nil, nil, SW_SHOW);
Тогда неполучается.

Всего записей: 30 | Зарегистр. 23-11-2004 | Отправлено: 12:27 15-07-2005
Dim2004

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SergeyReutov

Цитата:
DataModule1.ADOQuery1.Active:=True;
 
При этом возникает ошибка: "Текущий проводник не поддерживает возврат нескольких наборов записей в результате одной операции" и "ADOQuery1: CommandText does not return a result set".

Естессно. Нахрена ты пытаешься открыть запрос, не возвращающий dataset? Его нужно выполнить (DataModule1.ADOQuery1.ExecSQL()).

Всего записей: 222 | Зарегистр. 11-05-2004 | Отправлено: 13:13 15-07-2005
SergeyReutov



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Dim2004
Все понял. Спасибо.
 
А как можно проверить возвращает запрос какие-нибудь данные или нет?
Например, если взять самый простой:
Select *
From Cell
Where u1=7
Т.е. нашел он что-нибудь или нет.

Всего записей: 171 | Зарегистр. 23-01-2003 | Отправлено: 13:37 15-07-2005
h0mer



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
MICROPOM
если находиться в том-же каталоге, можно и не выкоблучиваться с путём, а сделать так.
WinExec('123.com',SW_SHOW);  
или так
ShellExecute(Handle, nil, '123.com', nil, nil, SW_SHOW);
и на будущее:
посмотри что возвращается в  
Label1.Caption := ExtractFilePath(Application.ExEName)+'123.com';
и узнаешь почему не работает.

Всего записей: 495 | Зарегистр. 11-10-2004 | Отправлено: 14:08 15-07-2005 | Исправлено: h0mer, 14:27 15-07-2005
MICROPOM



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
h0mer, спасибо, всё работает и всё оказалось намного проще.
 
Добавлено:
А неподскажете ещё как потом завершить это приложение, спустя некоторое время?
 
Добавлено:
h0mer

Цитата:
посмотри что возвращается в  
Label1.Caption := ExtractFilePath(Application.ExEName)+'123.com';  
и узнаешь почему не работает

 
Это я знал, возвращался правильный путь.

Всего записей: 30 | Зарегистр. 23-11-2004 | Отправлено: 14:27 15-07-2005
YurikGL



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
http://delphi4all.narod.ru/how/closeapp.htm
 
 
Эта программа закрывает Delphi Help.
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  PostMessage(FindWindow(nil, 'Delphi Help'), WM_QUIT, 0, 0);
end;
 

Всего записей: 308 | Зарегистр. 02-09-2004 | Отправлено: 20:40 15-07-2005
Z MeZe



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MICROPOM

Цитата:
А если этот фаил находится в каталоге с ЕХЕшником? И я хочу сделать так  
ShellExecute(Handle, nil, ExtractFilePath(Application.ExEName)+'123.com', nil, nil, SW_SHOW);  
Тогда неполучается.

Вот так будет правильно в этом случае:
ShellExecute(Handle, nil, PChar(ExtractFilePath(Application.ExEName)+'123.com'), nil, nil, SW_SHOW);
В shellexecute не строка (string) как параметр, а PChar. В общем, читай чем они отличаются.
А вообще, в этом случае правильно (корректно) с моей точки зрения так:
...
var
  path: array[0..64] of Char;
...
begin
...
 FillChar(path, SizeOf(path), 0);
 StrPCopy(path, ExtractFilePath(Application.ExEName)+'123.com');
 ShellExecute(Handle, nil, path, nil, nil, SW_SHOW);
...
end
 
h0mer

Цитата:
и на будущее:  
посмотри что возвращается в  
Label1.Caption := ExtractFilePath(Application.ExEName)+'123.com';  
и узнаешь почему не работает.

А что в этом случае возвращается? ,.. строка ведь, с корректным путем к файлу .
Объясни что имел ввиду...  

Всего записей: 455 | Зарегистр. 09-02-2004 | Отправлено: 23:32 15-07-2005 | Исправлено: Z MeZe, 23:33 15-07-2005
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А вообще, в этом случае правильно (корректно) с моей точки зрения так:  
...  
var  
  path: array[0..64] of Char;

ИМХО грубейшая ошибка, для пути есть специальная константа MAX_PATH, так как в противном случае, если путь будет длиннее 64 символов будешь получать AccessVilotion и мучительно думать, в чем проблема, почему иногда работает иногда нет.  
ТРак же считаю, что для данного случаю заморачиваться с
Цитата:
 FillChar(path, SizeOf(path), 0);  
 StrPCopy(path, ExtractFilePath(Application.ExEName)+'123.com');  
 ShellExecute(Handle, nil, path, nil, nil, SW_SHOW);  
...

не стоит, вполне достаточно
Цитата:
ShellExecute(Handle, nil, PChar(ExtractFilePath(Application.ExEName)+'123.com'), nil, nil, SW_SHOW);

SergeyReutov

Цитата:
А как можно проверить возвращает запрос какие-нибудь данные или нет?  
Например, если взять самый простой:  
Select *  
From Cell  
Where u1=7  
Т.е. нашел он что-нибудь или нет.

потом делаешь проверку if ADOQuery.RecordCount>0 then (//то есть есть записи в таблице, делаем что нам надо

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:55 18-07-2005
h0mer



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Z MeZe
я что то думал, что строка возвращается из ExtractFilePath(Application.ExEName) без последнего слэша. Обычно на win9x такая фигня.

Всего записей: 495 | Зарегистр. 11-10-2004 | Отправлено: 10:07 18-07-2005
PowerChute



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MICROPOM
 

Цитата:
А неподскажете ещё как потом завершить это приложение, спустя некоторое время?

А что там у тебя происходит? И по какому признаку надо  завершать?
А чтобы закрыть чужое приложение -  
PostMessage (FindWindow (nil, 'Loger'), WM_QUIT, 0, 0);

Всего записей: 520 | Зарегистр. 13-10-2004 | Отправлено: 11:57 18-07-2005
mr_eoi



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
PowerChute
11:57 18-07-2005
Цитата:
А чтобы закрыть чужое приложение -  
PostMessage (FindWindow (nil, 'Loger'), WM_QUIT, 0, 0);  

Так закрывают оконные приложения. В данном же случае у MICROPOM программа .COM -> запускается она в окне консоли. Я такие вещи делал через ShellExecuteEx с соответствующими настройками, получал HANDLE консоли (или все равно - чего запустилося). Для досрочного завершения используем TerminateProcess.


----------
Per Aspera Ad Astra...

Всего записей: 2203 | Зарегистр. 10-08-2003 | Отправлено: 12:24 18-07-2005
MICROPOM



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
PowerChute

Цитата:
А что там у тебя происходит? И по какому признаку надо  завершать?  
А чтобы закрыть чужое приложение -  
PostMessage (FindWindow (nil, 'Loger'), WM_QUIT, 0, 0);  

 
Запускается досовское приложение. После завершения оно просит эникей нажать.
Окно эмуляции ДОС остаётся активным.
 
Добавлено:
Я ещё так попробовал
var
ProcInfo: TProcessInformation;
CreateProcess('123.com', Nil, Nil, Nil, 1, 1, Nil, Nil, ^ProcInfo);
       ...
TerminateProcess(ProcInfo.hProcess, 0);
 
Вместо еденицы надо Incompatible types: 'LongBool' and 'Integer'
 
Добавлено:
А если я вот так делаю, то главная форма закрывается, а приложение нет.
 
 
ShellExecute(Handle, nil, '123.com', nil, nil, SW_SHOW);
...  
TerminateProcess(Handle, 0);

Всего записей: 30 | Зарегистр. 23-11-2004 | Отправлено: 13:12 18-07-2005
mr_eoi



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MICROPOM
ShellExecuteEx и ShellExecute - это разные функции. Вот пример кода на C++. Перевести на Дельфи, думаю, труда не составит. Данный фрагмент запускает программу "123.com" и, если в течение 10 секунд она не завершилать, завершает её принудительно.

Код:
  SHELLEXECUTEINFO sei;
  memset(&sei,0,sizeof(sei));
  sei.cbSize = sizeof(sei);  
  sei.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_DOENVSUBST | SEE_MASK_FLAG_NO_UI;
  sei.lpVerb = "open";
  sei.lpFile = "123.com"; // запускаемая программа
  sei.lpParameters = NULL;
  sei.lpDirectory = NULL;
  sei.nShow = SW_SHOW;
  BOOL res = ShellExecuteEx(&sei);
  DWORD timeout = 10*1000; // 10 seconds
  if(res && int(sei.hInstApp) > 32)  
  {
    DWORD wt = WaitForSingleObject(sei.hProcess,timeout);
    if(wt != WAIT_OBJECT_0)
    {
      TerminateProcess(sei.hProcess,0);
    }
  }
 


----------
Per Aspera Ad Astra...

Всего записей: 2203 | Зарегистр. 10-08-2003 | Отправлено: 15:08 18-07-2005 | Исправлено: mr_eoi, 15:10 18-07-2005
MICROPOM



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mr_eoi

Цитата:
Вот пример кода на C++. Перевести на Дельфи, думаю, труда не составит

Составит    
)

Всего записей: 30 | Зарегистр. 23-11-2004 | Отправлено: 15:49 18-07-2005
mr_eoi



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MICROPOM
15:49 18-07-2005
Цитата:
Составит

Лови:

Код:
uses ...,shellapi,...
...
var
  sei : SHELLEXECUTEINFO;
  res : boolean;
  timeout, wt : DWORD;
...
  FillChar(sei,SizeOf(sei),0);
  sei.cbSize := SizeOf(sei);  
  sei.fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_DOENVSUBST or SEE_MASK_FLAG_NO_UI;  
  sei.lpVerb := 'open';  
  sei.lpFile := '123.com'; // запускаемая программа  
  sei.lpParameters := nil;  
  sei.lpDirectory := nil;  
  sei.nShow := SW_SHOW;  
  res := ShellExecuteEx(sei);  
  timeout := 10*1000; // 10 seconds  
  if res and (integer(sei.hInstApp) > 32)  then
  begin  
    wt := WaitForSingleObject(sei.hProcess,timeout);  
    if wt <> WAIT_OBJECT_0 then
    begin  
      TerminateProcess(sei.hProcess,0);  
    end;  
  end;


----------
Per Aspera Ad Astra...

Всего записей: 2203 | Зарегистр. 10-08-2003 | Отправлено: 16:16 18-07-2005
   

Страницы: 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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi
ShIvADeSt (20-04-2006 01:53): http://forum.ru-board.com/topic.cgi?forum=33&topic=6679#1


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru