← Ноябрь 2001 → | ||||||
2
|
3
|
4
|
||||
---|---|---|---|---|---|---|
5
|
6
|
7
|
9
|
10
|
11
|
|
12
|
13
|
14
|
15
|
17
|
18
|
|
19
|
20
|
21
|
23
|
24
|
25
|
|
26
|
27
|
28
|
30
|
За последние 60 дней 2 выпусков (1-2 раза в 2 месяца)
Сайт рассылки:
http://www.interface.ru, www.itshop.ru
Открыта:
16-01-2001
Адрес
автора: comp.soft.win.mydelphi-owner@subscribe.ru
Статистика
-3 за неделю
Проблемы и решения в Delphi #34
Проблемы и решения в Delphi - выпуск 34 от 1.11.2001.
Минута слабости и ...
Года раскаяний .
ВСЕ ВОПРОСЫ СПРОСИТЬ ПРЕДЛОЖИТЬ АРХИВЫ СКОЛЬКО НАС
Доброго Вам времени суток уважаемый читатель - грустно мне сегодня.
Сегодня в выпуске :
~~~~~~~~~~~~~~~~~~~
1. Очередные вопросы.
2. Отвеченные вопросы.
~~~~~~~~~~~~~~~~~~~
1. Очередные вопросы.
---------------------
Вопрос 533:
От: В.А.Крашенинников
Думаю, не только мне будет интересно :
Чтобы CD-юк открыл\закрыл варежку, я использую команды (спасибо вашей
рассылке) :
mciSendString('Set cdaudio door open wait', nil, 0, handle);
mciSendString('Set cdaudio door closed wait', nil, 0, handle);
- Но, как оказалось, этого недостаточно - в некоторых случаях (
WinCommander
и еще что-то ) происходит обращение к драйву, и получаем синий экран -
не
фатально, но приятного мало. Есть, наверное сигнал, которым надо
задобрить
систему - ШАМАНЫ, помогите !!!
Когда щелкаю ( MsOE.5 ) адрес
'Спросить -mailto:DTarasov@kms.dvgd.ru?subject=delphiVamp&body=Вопрос:',
появляется готовая форма со странной строчкой в теле письма "чПРТПУ" -
полагаю соответствует "Вопрос"
Так вот, такой чПРТПУ - если моя писанина приходит к вам в таком
неудобочитаемом виде, то что я (не я) делаю неправильно |:?)
Ответить.
Ответ 1:
Вопрос 534:
От: strannik
Кто-нибудь знает такой компонент, который позволял бы
отображать
математические формулы, как в Mathcad?
Ответить.
Ответ 1:
Вопрос 535:
От: Ivan
Здравствуйте господа Делфийцы, вот простенькая, на первый взгляд,
задачка:
Пришлите мне пожайлуста код программы, которая содержит две label или
два
edit'а, не в том суть и две ОБЫЧНЫЕ BitBtn. При нажатии на одну из них
убирается caption у меток или у edit'ов.!! При ОДИНАРНОМ нажаии на
другую же
в одном из edit'ов пишется "Привет", а при ДВОЙНОМ щелчке на неё же во
втором Едите пишется "Привет again".
Последовательность нажатий любая( сначала - 1, потом - 2, или сначала -
2,
потом - 1).
Отследить надо мне события onclick и ondlbclick у BITBUTTON. Сразу
говорю,
читал в прошлом номере рассылки ответ на почти тот же вопрос... он
неработает... Попробуйте сделать так как там указано и судите...
Действительно надо использовать таймер... но что в нём надо
обрабатывать...
Я не знаю как сделать такую простую задачку.
Да! не пишите, типа поставь SpeedButton - событие OnDblClick у неё
работает
только при отсутствии события OnClick.
Ответить.
Ответ 1:
Вопрос 536:
От: President
Я использую NMHTTP, чтобы отправлять по какому-то одному адресу
данные из формы. Подскажите, пожалуйста, как можно отправлять данные
сразу
по нескольким адресам одновременно, т.е. реализовать сразу несколько
потоков или как это правильно сказать не знаю... Заранее благодарен.
Ответить.
Ответ 1:
Вопрос 537:
От: Алекс Чебыкин
Имею писанную в Дельфи 6 ДЛЛку со следующим кодом:
library Sample;
uses Dialogs;
type
TPluginInfo = record
PType: Byte; //Plugin type.
PName: String; //Plugin name
Copyright: String; //Copyright information
Version: String; //Plugin version
MinITBuild: Word; //Minimal build which can work with plugin
Description: String; //Plugin description
end;
//exported procedures and functions declarations
function GetPluginInfo: TPluginInfo; export;
begin
with Result do
begin
PType := 1;
PName := 'Plugin name';
Copyright := 'Copyright string';
Version := 'Version';
MinITBuild := 97;
Description := 'Simplest plugin.';
end;
end;
procedure PluginAbout; export;
begin
ShowMessage('Plugin About');
end;
function IncomeString(Host, TextString: String): Boolean; export;
begin
ShowMessage('Received Message from host "' + Host + '" : ' +
TextString);
Result := true;
end;
exports //Exported functions and procedures
PluginAbout name 'PluginAbout',
IncomeString name 'IncomeString',
GetPluginInfo name 'GetPluginInfo';
var
SaveExit: Pointer;
procedure LibExit;
begin
// ... // library exit code
ExitProc := SaveExit; // restore exit procedure chain
end;
begin
// ... // library initialization code
SaveExit := ExitProc; // save exit procedure chain
ExitProc := @LibExit; // install LibExit exit procedure
end.
и программу её использующую приблизительно вот так:
...
Объявления TGetPluginInfo также как и в ДЛЛ
...
procedure TForm1.btnGetPluginInfoClick(Sender: TObject);
var
GetPluginInfo: TGetPluginInfo;
t: TPluginInfo;
begin
@GetPluginInfo := GetProcAddress(TestHandle, 'GetPluginInfo');
if @GetPluginInfo <> nil then
begin
memLog.Lines.Add('Plugin info:');
t := GetPluginInfo;
memLog.Lines.Add(t.PName);
memLog.Lines.Add(t.Copyright);
memLog.Lines.Add(t.Version);
memLog.Lines.Add(t.Description);
memLog.Lines.Add(inttostr(t.PType));
memLog.Lines.Add(inttostr(t.MinITBuild));
end;
memLog.Lines.Add('End of plugin info');
end;
И при каждом обращении она окаянная выдаёт 'Invalid Pointer
Operation'...
Где я неправ?
В Дельфи 3 всё работало...
Ответить.
Ответ 1:
Вопрос 538:
От: nubsaybot
:Проблема подключить к проету СУБД Pervasive SQL 2000
Ответить.
Ответ 1:
Вопрос 539:
От: Ovtchinnikov Kirill
: Как сделать на Delphi программу, которая работает как прокси-сервер
(я имею в виду на локальном компьютере) (например Naviscope, GetSmart и
т.д.)? Желательно пример.
Ответить.
Ответ 1:
Вопрос 540:
От: postbald
Нужно подключить MS Access-вскую базу к Table.
При Table.Active:=True спрашивает имя юзера и пассворд
затем возникает ошибка "Cannot load an IDAPI servise library"
Вопрос: Как в BDE-ке подключить этот драйвер? И откуда он юзера берет
с пассвордом (мож стандартный какой есть как в Парадоксе?)
Ответить.
Ответ 1:
Вопрос 541:
От: Alexander Prishchepa
Пишу в Com порт следующим кодом:
strComPort:='COM4';
hndComHandle := CreateFile(PChar(strComPort),
GENERIC_WRITE or GENERIC_READ,
0,nil,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED or
FILE_ATTRIBUTE_NORMAL,
0);
if hndComHandle=INVALID_HANDLE_VALUE then
begin
ShowMessage('Не могу открыть '+ strComPort);
exit;
end;{if}
NumberWritten:=0;
if WriteFile(hndComHandle,PChar('ATZ'+#13)^,4,NumberWritten, nil) =
False
then
ShowMessage('Не могу записать в порт ' + strComPort);
NumberWritten:=0;
strNumber:='ATDP'+strNumber+#13;
if WriteFile(hndComHandle,PChar(strNumber)^,
Length(strNumber),NumberWritten, nil) = False then
ShowMessage('Не могу записать в порт ' + strComPort);
После исполнения этого кода не происходит НИЧЕГО!!! Не набирается номер,
не
показываются никакие ошибки. Очень нужно знать, в чем дело. Ответьте
Ответить.
Ответ 1:
Вопрос 542:
От: Игорь Маринин
На Майкрософте скачал SpchApi.exe. После импортирования (с ActivX -
Microsoft Telephony ) появился компонентик TPhone. Может кто работал с
ним. Хоть кусочек кода. Вроде интересная штука, помогите pleas...
Ответить.
Ответ 1:
Вопрос 543:
От: bigmir
Подскажите пожалуйста как в режиме RunTime изменить текст
всплывающей подсказки? Пробовал просто св-ву Hint присвоить значение
строковой переменной, не получается(подсказка вообще исчезает).
Ответить.
Ответ 1:
Вопрос 544:
От: Andy
У меня есть база данных (*.dbf), которая содержит
название документа (*.doc-поле FILENAME), директорию где хранится
документ (поле FILEPATH) и другие поля. Как мне по нажатию на Button1
загружать из проги word-вский документ, именно с тем названием и путем,
который именно в данный момент выбран у меня в БД?
Если сделать так,
procedure TForm1.Button1Click(Sender: TObject);
begin
shellexecute(0, nil, TABLE1FILENAME, nil, TABLE1FILEPATH, sw_restore);
end;
end.
то он выдает ошибку ('Incompatible types:'TStringField' and 'PCar').
Наверное надо преобразовать строку string в PChar, но как это сделать?
Ответить.
Ответ 1:
Вопрос 545:
От: Dizzer
Как поменять цвет выделения ячейки в StringGrid? По yмолчанию он синий.
Можно ли поменять цвет ScrollBar в StringGrig?
Как закpасить цветом отдельнyю ячейкy в StrigGrid?
Ответить.
Ответ 1:
Вопрос 546:
От: Hitman
по TADO - MS JET 4.0, база ACCESS'97.
Для вставки новой записи делаю:
TAdoConnection.BeginTrans;
TAdoConnection.Execute('INSERT...');
TAdoConnection.CommitTrans;
Запись действительно добавляется (вижу через SELECT), но на экране
в TDBGrid ее можно увидеть, только в следующем запуске программы.
Как мне обновить набор данных на экране.
TAdoTable.Refresh не помагает.
Можно, конечно, сделать
TAdoTable.Close;
TAdoTable.Open; (и это срабатывает).
Но врядли это хорошо.
Подскажите, как быть.
Ответить.
Ответ 1:
Вопрос 547:
От: strannik_
У меня несколько вопросов
1.Можно ли средствами Delphi создать полупрозрачную форму под W2k?
2.Как под W2k управлять питанием (выключить,перезагрузить комп)?
Ответить.
Ответ 1:
Вопрос 548:
От: gruzdewfam@mtu-net.ru
как узнать имя загруженной Dll
Я пишу микро отладчик, запускаю процесс,
CreateProcess(...)
Жду отладочного сообщения
WaitForDebugEvent(DebugEvent,INFINITE)
Смотрю, что за сообщение, если загрузилась DLL
if DebugEvent.dwDebugEventCode=LOAD_DLL_DEBUG_EVENT
then {что-то делаю}
Проблема заключается в том, как узнать имя загруженной Dll
А вообще, можно как-нибудь перехватить у приложения загрузку DLL
Ответить.
Ответ 1:
Вопрос 549:
От: Sasha_300
мне необходим компонент, который
позволяет создавать отчеты всевозможного плана, с возможностью
автоматического изменения структуры в ходе выполнения программы по
желанию пользователя. QReport для этих целей абсолютно не подходит, а
про другие я к сожалению не слышал. Подскажите чего есть в этом плане
хорошего, и где можно взять. Буду очень признателен.
Ответить.
Ответ 1:
2. Отвеченные вопросы.
----------------------
Вопрос 456:
От: Ignat Cherepanoff aka goodenemy
Почему InterBase 5.6 НЕ СТАВИТСЯ как сервис-служба на WINDOWS 2000?
Тогда какой ставиться? и где его взять в Сети?
Очень прошу, ответьте, т.к. из-за этого рассогласования срываются
практические работы в институте (я препод). Операционку на NT или
WIN98/ME руководство менять не намерены.
Ответить.
Ответ 1:
В NT4 в пакете ResoursKit идет утилитка srvany.exe. Она делает любую прогу сервисом. Попробуй под 2000.
Ответ 2:
IB6.0 а взять его можешь в и-нете на сайте борланда:'
Ответ 3:
Пробуйте 6-й из поставки Delphi6 он
меня при установке об этом как раз и спросил:
и только что я посмотрел его у себя в сервисах...
Вопрос 457:
От: Okulov
Кто- нить знает что- нить об оптимизации OpenGL программ
Пойтёт всё : ссылки б линки доки сорсы ВСЁ!!!!!!!!
Ответить.
Ответ 1:
http://www.okulov.boom.ru/
Ответ 2:
' Вот одна ссылка, что есть у меня для OpenGL : http://OpenGL.org.ru
Вопрос 458:
От: Andriy
Фиксирует ли Windows отличие при запуске проги на старте Windows из
реестра, автозагрузки, или ini файла и при запуске той же проги вручную
при работе Windows и если да, то как это отличие самой же прогой,
написаной на Delphi, выудить?
Ответить.
Ответ 1:
Windows, по-моему, различия не делает.
Но выход прост - помещая свою прогу в реестр, autoexec, или ini файл,
запускайте ее с каким-нибудь параметром.
Тогда, в программе if paramstr(1)=<MYPARAM> then <AUTORUN> else <я сам
запустил>
Вопрос 459:
От: Виталя
У меня такой вот вопросик имеется к господам прграммистам. Решил
пописать на WinApi из под Делфи, но
почему то никак не хочет регистриться мой класс окна функцией
RegisterClass(). Может кто знает в чём
тут трабл. Тот же самый код без проблем работает в BP for Windows 7.0.
На всякий случай вот *.dpr
файл. Кстати вдруг если это важно - Дельфя третья.
program Window;
uses Windows, Messages;
var w: TWndClassA;
h: HWND;
m: TMsg;
function WndProc(Wnd, Msg, WParam: Word; LParam: LongInt): Longint;
begin
WndProc := 0;
case Msg of
WM_DESTROY: PostQuitMessage(0);
else DefWindowProc(Wnd, Msg, WParam, LParam);
end;
end;
begin
w.style := 0;
w.lpfnWndProc := @WndProc;
w.cbClsExtra := 0;
w.cbWndExtra := 0;
w.hInstance := hInstance;
w.hIcon := 0;
w.hCursor := 0;
w.hbrBackground := COLOR_WINDOW;
w.lpszMenuName := NIL;
w.lpszClassName := PChar('MyWindow');
RegisterClassA(w);
h := CreateWindowExA(0, w.lpszClassName, 'Hello World !!! :-)',
WS_VISIBLE or WS_MINIMIZEBOX OR WS_SYSMENU OR WS_BORDER,
0, 0, 300, 600, 0, 0, hInstance, NIL);
GetMessage(m,0,0,0);
repeat
if m.message = WM_QUIT then Exit;
TranslateMessage(m);
DispatchMessage(m);
until not GetMessage(m,0,0,0);
end.
Ответить.
Ответ 1:
Сlass создавать надо примерно так:
var
wclass:TWndClass;
with wclass do
begin
style:=CS_CLASSDC or CS_PARENTDC;
lpfnwndproc:=@windowproc; {твоя поцедура окна }
hinstance:=instance;
hbrbackground:=Window_Background;
lpszclassname:=pchar('Имя класса окна');
hcursor:=loadcursor(0,IDC_ARROW);
end;
Ответ 2:
Первое, что заметил: параметр WParam типа Word будет работать
только в 16-битной среде (которую делает BP for Windows).
В Delphi все 32-битное, и этот параметр тоже.
Объявите его как LongInt.
Ответ 3:
Такая ошибка возникала у меня, когда я пыталась зарегистрировать уже
зарегистрированный класс (в приложении для Windows на C++). Для снятия
регистрации класса использовала функцию UnregisterClass.
Вопрос 460:
От: Уханов Ю.
После некоретного завершения программы все данные в БД (Paradox)
которые были введены в текущем сеансе пропадают.
Что надо сделать вместо - POST или еще что-то добавить?
Доступ к БД через BDE/
Ответить.
Ответ 1:
У виднов есть такая трабла, он несразу сбрасывает дисковые буфера, поэтому
информация может терятся, даже если ты корректно завершишь программу.
Для проброса буферов попробуй использовать
Posts all changes that have been written to the record buffer.
procedure FlushBuffers;
Ответ 2:
Проверь, стоит ли у тебя CashedUpdates - свойство в TTable. Или попробуй такой оператор TTable.ApllyUpdates.
Ответ 3:
100%-е сохранение изменений получается после следующих действий
Table.Active:=false;
Table.Active:=true;
Вопрос 461:
От: SeRj
Недавно ко мне попала база данных написанная на VisualFoxPro,
вся база вшита в один exe файл. Можно ли в Delphi так же?
(serjio_ssa@inbox.ru)
Ответить.
Ответ 1:
Насколько я знаком с FoxPro, база в нем в exe'шник не вшивается. В нем каждая таблица хранится в dbf-файле, а в exe'шнике в лучшем случае
прописываются пути к данным.
Вопрос 462:
От: MODus
Может ли кто-нибудь подсказать процедуру рекурсивного
обхода катологов локального диска с целью поиска файла(ов)
заданного(ых) по маске.
Ответить.
Ответ 1:
Вопрос 463:
От: Dizzer
Может кто имел дело с РСХ файлами, как мне этот файл загpyзить в Image?
У меня есть библиотека GraphicEx она pасшиpяет возможности стандаpтного
Image
чтобы понимать *.tif; *.tiff *.fax *.bw, *.rgb, *.rgba, *.sgi *.cel;
*.pic
*.tga; *.vst; *.icb; *.vda; *.win *.PCX, *.pcc *.scr *.pcd *.ppm, *.pgm,
*.pbm
*.cut, *.pal *.gif *.rla, *.rpf *.bmp, *.rle, *.dib *.psd, *.pdd *.psp
*.png Hо
из-за такого количества понимаемых фоpматов pазмеp пpогpаммы
yвеличевается на
250К.
Может y кого есть что-то поменьше для этой цели?
Ответить.
Ответ 1:
Вопрос 464:
От: vas
Люди, подскажите принципы формирования БД по технологии файл-сервер,
т.е. создание алиасов, разграничение доступа, блокировка записей.
Ответить.
Ответ 1:
Насколько я понимаю, термин "формирование БД" относится больше к введению информации в базу данных. Для этого не нужно знать все эти вещи :-). Вот
если нужно написать программу, которая обращается к файл серверу, тогда другое дело. Создание алиасов в BDE стандартное (File - New...). А вот
подробности зависят от конкретного драйвера БД, который в вопросе вообще не указан.
Вопрос 465:
От: oops
Пожалуйста, скажите как мне создать соединение удаленного
доступа из собственного инсталятора программы? Что для этого нужно?
Или укажите ссылки на литературу.
Ответить.
Ответ 1:
Использую функции из wininet.dll (см. MSDN) или функции сервера удаленного
доступа (RSA см. тамже)
Вопрос 466:
От: Makerov A.I.
Подскажите пожалуйста как мне отловить PID процесса, запущенного из
приложения делфи методом:
a=TMyObject.Create;
Процесс является OLE-приложением и выполняется как фоновая задача, не
создавая окон, по которым можно отловить handle, но которую можно снять
через обычный менеджер задач виндов.
Получается, что нужно отлавливать как-то по имени или классу процесса но
как это сделать?
Ответить.
Ответ 1:
Вопрос 467:
От: Ivan
Функция GetWindowLong, я с её помощью хочу
определить
стиль окна: мне нужно отобрать окна класса Button и из них кнопки стиля
BS_КФВШЩИГЕЕЩТ. Но я не знаю как проверить, после использования функции,
принадлежит или нет кнопка данному стилю. Так как же можно определить
стиль
окна, может я не ту функцию использую... Но ведь нет же функции
GETBUTTONSTYLE!!! Если непонятен вопрос - пожалуйста
Ответить.
Ответ 1:
Функция используется эта, но ввиде параметра nIndex , должен быть
GWL_STYLE, тогда на выходе вы получите некоторое число (32-бита)
назовем его X.
Чтобы узнать имеет ли окно данный стиль надо:
if (x and YOUR_STYLE)=YOUR_STYLE then //делаем что-то
З.ы. YOUR_STYLE - стиль окна, кнопки и т.д.
Вопрос 468:
От: Алекс Чебыкин
Имею следующую проблему: В Дельфи 5 стандартный компонент NMUDP не
желает
отправлять широковещательные сообщения. Даю ему адрес 255.255.255.255 -
тишина... До этого юзал IPWorks в Дельфе 3 - сия операция проходила без
особых затруднений... Возможно ли отправить широковещательное сообщение
в пятёре именно этим _стандартным_ компонентом?
Ответить.
Ответ 1:
нет, и вообще, чем скорее избавишься от этого компонентов TNM...,
тем лучше, у них проблем немерено... передача больших файлов,
больших пакетов UDP, широковещание (как ты уже понял), завершение
работы системы,...
но если очень надо именно TNMUDP , то можно сделать так:
пусть у меня сеть с адресами 192.168.0.xxx и маска 255.255.255.0
тогда broadcast можно сделать так:
RemoteIP := '192.168.0.255';
Вопрос 469:
От: Cool
Интересует такая вещь. К компонентам TClientSocket и TServerSocket
необходимо припаять событие OnDataSent, перехватывающее завершение
передачи данных... Попробовал разобраться сам - завис... Если еще
какие-то решения этой проблемки будут, заранее благодарен...
Ответить.
Ответ 1:
Нет никакой необходимости создавать такое событие. Есть два события OnWrite и OnRead. Ваше событие OnDataSent происходит, когда завершается
выполнение обработчика события TClientSocket.OnWrite или TClientSocket.OnRead (смотря кто и что делает с данными в Socket'е :-).
Просто вставьте Ваш код в конце обработки этих событий.
Вопрос 470:
От: Алексей Коротков
Подскажите пожалуйста, есть ли компоненты, позволяющие организовывать
запросы к локальным таблицам (точнее DBF), напрямую, минуя BDE, не
используя ADO, ODBC и т.д. Т.е. аналог TQuery. Для TTable есть
компонент TDbf, а вот как быть с TQuary. Может кто и адресок
подскажет...
Ответить.
Ответ 1:
Вопрос 471:
От: Dm
Подскажите, почему не запускается пример
c dbExpress - 'dbExpress Explorer' из
6-й делфи - '..Delphi6\Demos\Db\DbxExplorer\.. '.
Точнее он запускается, но при открытиии чего - либо
пишет, что нет каких то библиотек?
Где их взять?
Ответить.
Ответ 1:
Вопрос 472:
От: vas
Как программно проверить соответствие индекса базе данных Paradox ?
Ответить.
Ответ 1:
Вопрос 473:
От: DEKurdjukov@sng.tnk.ru
Каким образом можно изменить принтер по умолчанию програмным
путем не вызывая диалог настройки принтера .
Ответить.
Ответ 1:
Вопрос 474:
От: Nikolay
Доброго времени суток!
У меня такой вопрос-как можно работать с файлами в локальной сети-поиск,
копирование т.п.
Ответить.
Ответ 1:
Вопрос 475:
От: Alexandr
1) При инсталляции собственного компонента Delphi 5 требует одноименный
компонент
bpl-файл. Как мне его создать?
2) У меня Win 98. После компиляции программы на своем компьютере, на
95-том
Windows не прорисовываются картинки на TToolBar. Вы не можете
подсказать,
что этому TToolBar'у не хватает в Win 95?
Ответить.
Ответ 1:
2). Попробуй в Win95\system кинуть comctl32.dll из Win98\system.
Ответ 2:
На второй вопрос ответ таков - требуются обновленные версии библиотек
comctl*.dll. Вместе с Delphi обычно поставляется программа обновления:
40comupd.exe
или
50comupd.exe
(у меня в каталоге \Info\Extras\Comctl)
Вопрос 476:
От: Алексей Малиновский
Всё таки никак не могу разобраться с Interbase.
Сделал сетевую программу складского учёта с использованием Interbase.
1. Настройка компьютера, считающегося сервером.
Устанавливаю на одну машину (имя компьютера SERV, сервер) InterBase
Server и Client, запускаю ibServer.exe, запускаю программу (в пути базы
данных прописываю путь БД: Database.DatabaseaName:="C:\program
files\m-a-b\склад\data\sklad.gdb") - программа работает!
2. Настройка компьютера клиента.
Устанавливаю на другую машину (которая в находится сети и видит машину
сервер под именем SERV) InterBase Client, прописываю БД с помощью
ibconsole.exe - связь с БД есть. Запускаю ibguard.exe. Запускаю свою
программу, и в пути БД прописываю:
Database.DatabaseaName="SERV:C:\program
files\m-a-b\склад\data\sklad.gdb" - выдаётся ошибка соединенения с
сервером!
Подскажите что делать, в каком хоть направлении продолжать
исследования???
Ответить.
Ответ 1:
дык там IMHO надо писать \\SERV\C\program files\m-a-b\склад\data\sklad.gdb
Ответ 2:
Я делаю так: запускаю c клиента Communication Diagnostic и проверяю
наличие связи с портом 3050 сервера (в NT - сервер является службой, в 9* -
приложением, а в *nix Демоном, но все слушают этот порт по умолчанию). Если
все ОК - запускаю Server Manager и подключаюсь к Remote Server, а затем и
путь к базе на этом сервере. Если все это сработает - траблы в программе,
если нет в настройках IB сервера и клиента, хотя это вряд ли, т.к. после
установки все само сабой работоспособно. Кстати было бы неплохо знать какие
компоненты используются для доступа к данным, рекомендую для Delphi 4 -
FIB-ы, а в Delphi 5,6 есть IBX, или можно вездесущий ADO. Кстати если путь
serv:c:\db\test.gdb - то используется TCP/IP, а если \\serv\c:\db\test.gdb -
это netbeui (для локалки NT предпочтительнее). И еще я по-привычке ставлю и
сервер и клиент на все машины, и не испытывал никогда трудностей.
Ответ 3:
Попробуй протестировать с соединение с сервером с помощью
Communication Diagnostics. Проверь с помощью сокета открыт ли порт
3050. Используй для соединения технологию Interbase Express
(вкладка на палитре компонентов InterBase). Возможно IP-адрес и имя
сервера не прописаны в файле HOSTS или протокол доступа к Interbase не
описан в файле SERVICE.
Ответ 4:
Попробуй для начала не запихивать базу в такие дебри ;)
Запиши её в C:\base\sklad.gdb
Ответ 5:
В общем есть разница если для работы с БД Interbase в Дельфях используются BDE или прямой доступ через компоненты IBX или FIB.
Учитывая, что использование BDE при работе с Interbase можно воспринимать как анахронизм :) то ->
Для установки программы необходимо
а) Выбрать компьютер, на котором будет находиться файл БД slad.gdb, установить на этот компьютер Interbase server. Если на этом компьютере будет
запускаться программа, установить на нём Interbase client (это один из пунктов выбора устанавливаемых компонент при установке Interbase servera).
б)Установить на остальные компьютеры Intebase client (условие обязательное).
в)Допустим, что БД находится на компьютере, имеющем сетевое имя HOST, в дирестории C:\BASE\SKLAD.GDB, тогда в при разработке программы в
компоненте TIBDatabase property DatabaseName='HOST:C:\BASE\SKLAD.GDB' для удалённых ПК и DatabaseName='C:\BASE\SKLAD.GDB' для сервера.
Я к примеру пишу отдельную програмулину или пункт меню опций для определения нахождения БД(удалённая, локальная) и записи этих данных в INI или
реестр и использую эти данные при загрузке программы и приконнекчивании к базе.
г)При помощи IBConsole (для IB V 6.0x) Нужно определить пользователей, раздать им права и свободы, или запреты ну и дальше арбайтать....
Ответ 6:
DatabaseName - 192.168.1.1:TEST.GDB
где 192.168.1.1 - IP адресс машины на котором установлен IB Server (проверьте чтобы был запущен),
TEST.GDB - файл IB.
Но у меня есть подозрения, что Вы допустили ошибку при Register Server или Register Database.
Register Server -
Register ...-> Remote Server ->Server Name -(IP-шик машины с IB Server) ->Network Protocol -(TCP/IP)->.....
Register Database
file - путь к файлу *.GDB все остальное я думаю понятно.
(желательно Default Character set установить в win1251)
Ни каких "клиентов" нигде устанавливать ненадо (гарантия 99.99%).
Ответ 7:
В папке Windows есть два файла:
hosts.sam
service
На клиентской машине в файле hosts.sam должна быть строка
111.10.10.10 SERVER_NAME
IP сервера имя сервера
На клиентской машине в файле service должна быть строка
gds_db 3050/TCP
Ответ 8:
В свойстве Database.DatabaseName надо указать какой-нибудь произвольный псевдоним для этой базы данных, например Sklad1.
Этот псевдоним затем можно будет использовать для обращения к базе например с помощью TTable, а вот в свойство Database.Params надо
ввести примерно такой список:
SERVER NAME=SERV:/program files/m-a-b/склад/data/sklad.gdb
USER NAME=SYSDBA
OPEN MODE=READ/WRITE
SCHEMA CACHE SIZE=8
LANGDRIVER=
SQLQRYMODE=
SQLPASSTHRU MODE=SHARED AUTOCOMMIT
SCHEMA CACHE TIME=-1
MAX ROWS=-1
BATCH COUNT=200
ENABLE SCHEMA CACHE=FALSE
SCHEMA CACHE DIR=
ENABLE BCD=FALSE
BLOBS to CACHE=64
BLOB SIZE=32
PASSWORD=
* - параметры установленные по умолчанию
Database1.DatabaseName:='Sklad1';
Database1.DriverName:='INTRBASE';
Database1.Open;
if Database1.Connected then
begin
Table1.DatabaseName:='Sklad1';
Table1.Active:=TRUE;
end;
Ответ 9:
В Вашем случае: работать в принципе не будет (Сетевой речурс SERV:C:\program files\m-a-b\склад\data\sklad.gdb" нужно октрыть в сети наполный доступ,
что ОЧЕНЬ плохо)
Путей решения два
2 использовать IBcomponents в дельфи (минусы перелопатить код и я непроверял на сетке)
(плюсы ненужен BDE ~16 мб на клиенте)
1 использовать ODBC драйверы совместно с BDE
создать ODBC на базу на серваке
в программе Database.DatabaseaName не использовать, нужну через ALIAS
тогда все пойдет по сети на клиенте ODBC указывает на ЗАКРЫТЫЙ ДЛЯ ДОСТУПА файл GDB (Вы знаете имя и путь :-) но проверте GDS_DB клиент его не
прописывает В файле service в корне виндов сравните с записью на сервере для понятности ) тестируйте ib diagnostic.
(минусы нужен BDE ~16 мб на клиенте)
(+ менять только databases и ВСЕ)
Ответ 10:
Для протокола NetBEUI строка будет \\SERV\C:\program
files\m-a-b\склад\data\sklad.gdb
Для протокола TCP/IP строка будет 192.168.1.123:C:\program
files\m-a-b\склад\data\sklad.gdb, где вместо 192.168.1.100 подставить
настоящий адрес
Для TCP/IP в файле WINNT\SYSTEM32\DRIVERS\ETC\SERVICES должна быть строка
gds_db 3050/tcp
Ответ 11:
1. в файле services (c:\windows) напиши строчку
gds_db 3050/tcp
2. купи книжку "Delphi x и создание приложений баз данных"
Вопрос 477:
От: Stark
Есть локальная сеть. Есть Delphi 5. Нужно
написать программу которая сканировала бродкаст (***.*.*.255)
на наличие определенных пакетов на определенных портах и
считала их количество.
Насколько, я понимаю клиент-серверные компоненты здесь
неуместны. Возможно подорйдет, NMUDP, но как с ним работать я
не смог разобраться.
Ответить.
Ответ 1:
Вопрос 478:
От: Alexander
Подскажите пожалуйста - какими компонентами пользоваться (желательно с
примером) или подскажите литература, чтобы своять прогу для ведения
учета времени и удаленого управления компом по типу компьтерного зала.
Ответить.
Ответ 1:
Вопрос 479:
От: Semen
Есть вопрос. Может быть кто-то с этим сталкивался и добился
результатов. Есть задача, надо организовать проверку орфографии прямо
в компоненте редактора (как это делает Word, The Bat). Слова с
ошибками подчеркиваются, есть варианты ответов, добавление слова в
словарь.
ActiveX компонент delphi VSSpell не подходит.
Может кто какой компонент предложит.
Ответить.
Ответ 1:
Для проверки правописания ты можешь использовать этот компонент, но тебе для
нормальной работы необходимо создать еще один поток, который параллельно
основному будет проверять введенный текс на правильность. Все коммерческие
проги так и делают.
Вопрос 480:
От: Mickle
Господа, подскажите самый лучший алгоритм для записи содержимого
компонента TStringGrid на диск. К сожалению, для этого компонента метод
SaveToFile не предусмотрен. Он предусмотрен только для свойства Rows, но
в этом случае кол-во файлов будет равно количеству горизонтальных рядов
в сетке. Я использовал запись через FileWrite. Может у кого есть
альтернативные варианты?
Ответить.
Ответ 1:
Используй для записи TStream и его методы:
Писать в поток построчно, т.е. заменить
SaveToFile на SaveToStream, а затем весь поток
сбросить в файл, или сразу открыть поток как
файловый...
Ответ 2:
Можно и так:
unit a;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
StringGrid1: TStringGrid;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
with StringGrid1 do
begin
Cells[1,0] := 'Column 1';
Cells[2,0] := 'Column 2';
Cells[3,0] := 'Column 3';
Cells[4,0] := 'Column 4';
Cells[0,1] := 'Row 1';
Cells[1,1] := 'Object';
Cells[2,1] := 'Pascal';
Cells[3,1] := 'is';
Cells[4,1] := 'excellent';
Cells[0,2] := 'Row 2';
Cells[1,2] := 'Delphi';
Cells[2,2] := 'is';
Cells[4,2] := 'RAD';
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i,j :Integer;
begin
ListBox1.Items := StringGrid1.Rows[1];
for i := 2 to StringGrid1.ColCount do
begin
ListBox1.Items.AddStrings(StringGrid1.Rows[i]);
end;
end;
И потом, ListBox1.Items.SaveToFile(...).
Только содержимое каждой ячейки будет сопровождаться переводом каретки. И текст верхнего фиксированного ряда (если он есть)
тоже будет записан в файл. Чтобы этого избежать, я не вижу ничего другого, как заносить текст каждой ячейки в список строк,
сканируя всю таблицу в цикле.
end.
Вопрос 481:
От: Вадим Овчинников
Подскажите, пожалуйста, новичку, что это такое и как с этим бороться.
:Access violation at address 00403DB6 in module 'PROGA.EXE'. Read of
address
04150B24
То, что написано в хельпе меня никоим образом не "образовало" :)
Ответить.
Ответ 1:
Еще бы. По такому сообщению об ошибке вообще мало что можно узнать.
Следует включить "Stop on Delphi exceptions" в Debugger Options и смотреть
на какой строке вылетает."
Ответ 2:
Это говорит о том, что компонент на который указывает отладчик,
вызывается, но еще не создан. При запуске программы создаются формы и
компоненты. Созается Form1 и создаются её внутренности, а ты в это
время, на пример, пытаешься обратиться к Form2 по событию OnCreate
Form1, которая ещё не создалась. Вот он тебе и пишет, что доступ к
объекту запрещён.
Ответ 3:
Скорее всего в этом случае указатель ссылается на область памяти на
которую он ссылаться не должен. Причина вероятно кроется в том, что
указателю забыли присвоить значение. Например
var MyObject:TSomeComponent; {фактически MyObject-указатель}
begin
MyObject.DoSomething {может привести к Access violation}
end;
забыли присвоить значение указателю MyObject
нужно было
MyObject:=TSomeComponent.Create;
MyObject.DoSomething;//теперь нормально
Ответ 4:
Дословный перевод:
Нарушение доступа по аддресу <такому то> программой <такой то>. Чтение
аддреса <такого то>. Программа обращается к памяти, аддресс которой ей
недоступен. Возможные причины: несоблюдение првил работы с переменными
типа pointer, работа с переменной, обьявленной как класс, без создания
екземпляра класса. Пример:
var
B:TButton;
........
begin
B:=TButton.Create(self); //сперва должно быть это
B.Caption:='Start'; //без верхней строчки последствия непредсказуемые-
ERROR!!!
Вопрос 482:
От: Hitman
Обратил внимание, что иногда в базе Paradox (через BDE)
исчезают записи. То есть делаю Append, инициализирую
поля, POST, запись появляется на экране (TDBGrid), не
закрывая приложения открываю соответствующий файл
DB в Far (на просмотр) - там этой записью и не пахнет
(остальные вижу). Закрываю приложение, закрываю
Delphi, открываю DB - а вот и она. Отсюда вывод -
если глюкнет приложение, Delphi (крайне редко, но бывает),
или машина - то запись потеряется. Пробовал
добавить после POST TTable.Close; TTable.Open - эффект
тот же. Вопрос, что ж это за отложенная запись такая
и как с ней бороться? Аналогичный вопрос задает и
товарищ Уханов в предыдущей рассылке.
Ответить.
Ответ 1:
Программы, работающие в режиме отладки
из-под Делфи, используют свою область BDE,
т.е. работа с такой системой похожа на работу
с кэшем. Соответственно, одна и та же программа,
запущенная из Делфи или напрямую из Виновса,
будет работать реально с разными копиями базы
данных. Сделано это скорее всего для обеспечения
сохранности информации в базе данных, т.к. в процессе
написания новых версий одной и той же программы,
этот процесс может запороть уже существующую и
работающую базу :).
Лечение данной фичи одно - переход на систему
клиент-сервер (Интербейз, Оракл и т.п.).
Ответ 2:
Записи кэшируются, что существенно ускоряет работу.
Для окончательного запоминания изменений используйте:
table.FlushBuffers
Ответ 3:
Можно попробовать принудительно записовать все изменения сделанные в кеше
BDE на диск
Примерно так:
procedure TMainMDIForm.NewOnIdle(Sender:TObject; var Done:Boolean);
begin
DbiUseIdleTime;
end;
constructor TMainMDIForm.Create(Owner:TComponent);
begin
Application.OnIdle:= NewOnIdle;
inherited Create(Owner);
end;
DbiUsedIdleTime - должна все изменения записовать на диск, это функция BDE.
для ее использования нужно в uses приписать BDE. Во всяком случае для D2 это
работает.
Ответ 4:
А с этим бороться и не надо. Дело в том, что из под IDE (т.е. когда
прога запущена из-под дельфей) происходит что-то типа неявно стартующей
транзакции на базу, а при выходе из Delphi происходит такой же
неявный Rollback. Если прогу запустить самостоятельно, то все должно
быть ОК.
И еще: добавленные записи не пишутся сразу физически на диск, а лежат
в виртуальной таблице в кэше. Чтобы принудительно скинуть кэш на диск
есть процедура Table.FlashBuffers.
Ответ 5:
Смею тебя заверить, что после выполнения метода POST для локальных
БД запись немедленно физически запоминается. Чтобы убедиться в этом,
открой утилиту SQL Explorer (не понимаю зачем смотреть в фаре, если
есть специальная утилита просмотра, поставляемая с дельфи), доберись до
своей таблицы и убедись, что всё сохранилось :)
Вот если-бы у твоего компонента TTable свойству CachedUpdates было
присвоено значение True, тогда действительно в кеше создаётся
локальная копия данных и изменение происходит в буфере. Подтверждение
осуществляется методом ApplyUpdates набора данных.
Ответ 6:
DbiSaveChanges(Table.Handle).
Вопрос 483:
От: Алексей Малиновский
Господа, подскажите можно ли как нибудь программно в Delphi осуществить
очистку мусора в БД Interbase, а также сохранение копии и
восстановление. Если можно то как?
Ответить.
Ответ 1:
C IB идет утилитка gbak.exe. Ее-то и нужно вызывать с параметрами,
описания которых можно посмотреть в хелпе.
Ответ 2:
Как мимнимум вызывать gbak и gfix с параметрами, ну а в IB 6 можно
напрямую через API, но надо читать APIGUIDE.
Вопрос 484:
От: vas
Как проверить программно соответствие индекса БД Paradox ?
Например при зависании программы, при редактировании каой либо записи
может нарушиться соответствие индекса таблице. Так вот , как проверить
корректен ли индекс.
Ответить.
Ответ 1:
Можно не только проверить, но и при необходимости исправить.
Смотри на сайте борланда есть утилитка с исходниками TUtil32 b
DTutil32. Будешь качать исходники качни еще одноименную dll.
Ответ 2:
try
Table1.IndexName := 'index1';
except
on EE : EDBEngineError do
begin
ListBox1.Items.Add (EE.message );
end;
end;
Вопрос 485:
От: Sasha_300
БОЛЬШАЯ ПРОСЬБА помогите разобраться с тем как можно
корректно
удалять и вставлять записи в связанные таблицы. У меня две
Access-овских таблицы, со связь Master-Detail по одному полю,
подключенных с помощью ADO-технологии. С помощью команды Delete я
отчищаю сначала подчиненную таблицу, потом удаляю запись в основной,
все замечательно удаляется, но при обновлении данных выпадает
сообщение типа: OleException: A given Hrow referred to a hard or soft
deleted row.
и дальше работа моей программы не идет. Подскажите пожайлуста, что
мне с ней сделать. Ну очень нужно, а в книгах не нашел, сам пишу
недавно.
Ответить.
Ответ 1:
Может ещё есть подчиненные
или здесь я подозреваю надо реиндексировать таблицы после твоих операций
Delete
Если Вы хотите как можно скорее получить ответ на свой вопрос, то
укажите в теме письма - delphiV,иначе письмо будет прочитано значительно
позже, если же у вас есть предложения то в теме письма укажите delphiP.
Для интересующихся - немного о себе. Работаю на
железнодорожном транспорте ведущим программистом.
Основные мои разработки - это сбор и доставка клиентам
информации о вагонах и поездах: где находится(по России),
куда едет. В связи с этим программировал для e-mail,Socket,БД,ISAPI.
За сим прощаюсь - скорых Вам и качественных программ.
Автор рассылки - Дмитрий.
ICQ - 89533941.
ВСЕ ВОПРОСЫ СПРОСИТЬ ПРЕДЛОЖИТЬ АРХИВЫ СКОЛЬКО НАС
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу | Рейтингуется SpyLog |
В избранное | ||