Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi 2

Автор: OXDBA
Дата сообщения: 23.06.2006 11:34

Цитата:
в dbgreed отображается только 1-о поле

Тогда это ты очем? Если о записи, то да, если все-таки о поле, то ...

Автор: 31416
Дата сообщения: 23.06.2006 11:35
все ок. мне нужно было перебрать записи

Добавлено:
вопрос по interbase
есть таблица -
CREATE TABLE "TREE"
(
"ID"    INTEGER NOT NULL,
"PARENT_ID"    INTEGER NOT NULL,
"SECTION"    CHAR(30) NOT NULL,
UNIQUE ("SECTION"),
PRIMARY KEY ("ID")
);

как сделать чтобы при INSERT INTO TREE (parent_id,section) VALUES (1, 'NAME');
поле id автоматически автоинкрементривалось?

Добавлено:
спасибо я понял нужно так -
CREATE GENERATOR GEN_KEY;

SET TERM !! ;
CREATE TRIGGER SET_ID FOR TREE
BEFORE INSERT AS
BEGIN
new.id = gen_id(GEN_KEY, 1);
END !!
Автор: YurikGL
Дата сообщения: 23.06.2006 21:05

Цитата:
как сделать чтобы при INSERT INTO TREE (parent_id,section) VALUES (1, 'NAME');
поле id автоматически автоинкрементривалось?

Если не ошибаюсь, можно проще

INSERT INTO TREE (parent_id,section) VALUES (gen_id(GEN_KEY, 1), 'NAME');


Автор: vserd
Дата сообщения: 24.06.2006 12:52
YurikGL
Можно и так, только вариант с триггером более универсальный, и если будет вставка не через программу, то запись корректно вставится.
Автор: YurikGL
Дата сообщения: 24.06.2006 13:00

Цитата:
YurikGL
Можно и так, только вариант с триггером более универсальный, и если будет вставка не через программу, то запись корректно вставится.

Не люблю делать через триггеры т.к. иногда надо после этого этот id-к получить... или вставить явно с явным id-м. Тогда этот триггер мешаться будет.
Автор: FireZone
Дата сообщения: 25.06.2006 10:10
YurikGL
Цитата:
или вставить явно с явным id-м. Тогда этот триггер мешаться будет.
Вот так не будет мешаться
Код: CREATE TRIGGER SET_ID FOR TREE
BEFORE INSERT AS
BEGIN
if (new.id is null) then
new.id = gen_id(GEN_KEY, 1);
END
Автор: ckotick
Дата сообщения: 26.06.2006 07:30
У меня есть такая идея. Скажите, насколько возможно ее осуществление?
В приложении два TTcpServer. Один "рабочий", второй - "контролирующий". Предположим, "рабочий" переглючило. Я хочу, чтобы была возможность соединиться с "контролирующим" и прервать выполнение потоков "рабочего". Возможно даже уничтожить и создать заново. В принципе, задачу эту я решил. Но в случае, если "рабочий" "висит", уничтожить его не получается. А мне хотелось бы, чтобы перезапуск был возможен в любом случае. Возможно, в рамках одного приложения это в принципе не возможно, и стоит сделать два приложения (сервиса)?
Автор: reenoip
Дата сообщения: 26.06.2006 07:53
ckotick, а если попробывать повесить автозапуск второго TTcpServer на "OnDisconnect" или "OnError" первого? И, соответственно, на "OnConnect" первого TTcpServer повесить сброс/обнуление второго?
Названия процедур, конечно, чисто условные

Добавлено:
А вообще, по-моему, надо искать нормальный TCPServer, чтобы был один в одном приложении. А второй толкать в сервис, если есть необходимость. Могу и ошибаться, статуса "чайник" меня ещё никто не лишал, но предположить/предложить я всегда могу
Автор: ckotick
Дата сообщения: 26.06.2006 08:40
Вообще я наверное не совсем точно изложил суть проблемы.
Планируется, что сервер будет принимать какие-то данные от клиентов (команды), "что-то" там у себя делать и отправлять клиентам ответы. Вот это "что-то" может вполне его загнуть. Я хочу сделать возможность убивать все рабочие потоки приложения, связанные с этим сервером.
Как вариант делал следующее: по приему пакета от клиента сервер впадал в бесконечный цикл. При этом дальнейшие соединения были возможны до определенного предела. Соединение через контрольный TcpServer с отправкой команды на убиение первого ни к чему не приводило. Хотя реально пока первый не "висит", убийство (.Destroy) вполне прокатывает.

Есть у меня еще одна проблема.
Написал библиотеку. Вроде бы все работает - экспортируемые процедуры-функции спокойно вызываются внешней программой, возвращают необходимые результаты.. Но при завершении приложения вылетает run-time ошибка. Как я понимаю, библиотека выгружается некорректно. Читал help про процедуру инициализации. В принципе даже все понял.. Но вот пример кода меня вогнал в ступор. [more=Не работает.]library Test;
var
SaveDllProc: Pointer;
procedure LibExit(Reason: Integer);
begin
if Reason = DLL_PROCESS_DETACH then
begin
... // library exit code
end;
SaveDllProc(Reason); // call saved entry point procedure
end;
begin
... // library initialization code
SaveDllProc := DllProc; // save exit procedure chain
DllProc := @LibExit; // install LibExit exit procedure

end.[/more]
Автор: ShIvADeSt
Дата сообщения: 26.06.2006 09:12
ckotick

Цитата:
Планируется, что сервер будет принимать какие-то данные от клиентов (команды), "что-то" там у себя делать и отправлять клиентам ответы.

аналогичная проблема (решается через потоки все это)
http://forum.ru-board.com/topic.cgi?forum=33&topic=6920&start=0#lt там много чего полезного найдешь.
Автор: ckotick
Дата сообщения: 26.06.2006 10:06

Цитата:
Но при завершении приложения вылетает run-time ошибка.
Был побежден ShareMem - не там подключался в проекте. Да и вообще перешел на FastShareMem.
Автор: RomanTim
Дата сообщения: 26.06.2006 10:31
ckotick

Цитата:
Это все ShareMem, зараза.. Но к сожалению, приложение с библиотекой обмениваются строками (не короткими). Переход на FastShareMem не помог - новые ошибки...

Сделай передачу строк через PChar - как это в C делается, тогда и ShareMem не нужен и универсальнее получается (до кучи и способ вызова можно сделать stdcall).
Автор: ckotick
Дата сообщения: 26.06.2006 10:46
RomanTim
Цитата:
Сделай передачу строк через PChar - как это в C делается
Попробовал - че-то не так получилось. Хотя, наверное, переделаю в конце-концов. А вообще, после правильного подключения модуля все заработало корректно. Ну и FastShareMem тоже гораздо более универсален, чем ShareMem+borlndmm.dll

Автор: OOD
Дата сообщения: 27.06.2006 08:51
люди выручайте никогда неработал с генератором случайных чисел....
Как осуществить проверку с соответствием т.е.
чтбы генератор RND генерировал числа в промежутке от 1 до 5 и в дальнейшем выпонял различный условия в зависимости от сгенерированного числа..
т.е. если 1 ,значит условия .....
если 2 , значит условие 2...
если 5, значие условия 5...

Как это сделать помогите ведь для Вас -это 5 секунд я уверен
Автор: Nightcrawler
Дата сообщения: 27.06.2006 09:02
a := Random (5)+1 //кажется так, Дельфи нет под рукой чтобы проверить
case a of
1: begin code1 end;
2: begin code2 end;
3: begin code3 end;
4: begin code4 end;
5: begin code5 end;
end;
кажется так
Автор: OrlangurStep
Дата сообщения: 27.06.2006 09:20
Как программы заменяющие стандартный диспетчер задач заставляют винду запускать их? Можно реализовать это на Delphi 7. Конкретно для NT|2000|XP.
Автор: ckotick
Дата сообщения: 27.06.2006 10:51
OOD
И еще перед кодом от Nightcrawler нужно добавить
Randomize;
Автор: OdesitVadim
Дата сообщения: 27.06.2006 11:14
OrlangurStep
Можно просто заменить старый taskmgr.exe своим, новым
Правда старый лучше сохранить и в dllCache тоже посмотреть
Автор: OOD
Дата сообщения: 27.06.2006 12:22
Nightcrawler
ckotick



Всё работает


Код:
procedure TForm1.FormCreate(Sender: TObject);
var

r,s :Byte;
begin
Randomize;

r := Random(5)+1;
case r of
1: begin ShowMessage('1') end;
2: begin ShowMessage('2') end;
3: begin ShowMessage('3') end;
4: begin ShowMessage('4') end;
5: begin ShowMessage('5') end;
end;

end;

end.
Автор: greenpc
Дата сообщения: 27.06.2006 13:48
OOD
первый код : делает что ты просил.
второй: только набивает массив неповторяющимися числами 1-5
Что конкретно тебе надо ?
Автор: OOD
Дата сообщения: 27.06.2006 14:23
greenpc
Всё спасибо с а массивом перепудрил и так отлично работает
Автор: DroN_S
Дата сообщения: 27.06.2006 19:00
OOD
идея с массивом вообще дело непонятно!!!!
Автор: ErgoB
Дата сообщения: 28.06.2006 10:44
Попробовал использовать source formater'ы типа DelForExp, Jedi Code Format но оказалось, что у всех на редкость одинаковые функции. Кто нибудь знает эксперты такого типа, чтобы на лету код форматировался, как например в VB.NET ? И какими вообще экспертами такого типа кто пользуется ?
Заранее спасибо.
Автор: OOD
Дата сообщения: 28.06.2006 15:04
проблема такая существует приложение внутри него WebBrowser Со страничьками.
Как передать WebBrowseru нажатие клавиш?
пробовал так:
[more]

Код:
procedure PostKeyEx32(key: Word; const shift: TShiftState; specialkey: Boolean);
type
TShiftKeyInfo = record
shift: Byte;
vkey: Byte;
end;
byteset = set of 0..7;
const
shiftkeys: array [1..3] of TShiftKeyInfo =
((shift: Ord(ssCtrl); vkey: VK_CONTROL),
(shift: Ord(ssShift); vkey: VK_SHIFT),
(shift: Ord(ssAlt); vkey: VK_MENU));
var
flag: DWORD;
bShift: ByteSet absolute shift;
i: Integer;
begin
for i := 1 to 3 do
begin
if shiftkeys[i].shift in bShift then
keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), 0, 0);
end; { For }
if specialkey then
flag := KEYEVENTF_EXTENDEDKEY
else
flag := 0;

keybd_event(key, MapvirtualKey(key, 0), flag, 0);
flag := flag or KEYEVENTF_KEYUP;
keybd_event(key, MapvirtualKey(key, 0), flag, 0);

for i := 3 downto 1 do
begin
if shiftkeys[i].shift in bShift then
keybd_event(shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0),
KEYEVENTF_KEYUP, 0);
end; { For }
end; { PostKeyEx32 }


// Example:

procedure TForm1.Button1Click(Sender: TObject);
begin
//Pressing the Left Windows Key
PostKeyEx32(VK_LWIN, [], False);

//Pressing the letter D
PostKeyEx32(Ord('D'), [], False);

//Pressing Ctrl-Alt-C
PostKeyEx32(Ord('C'), [ssctrl, ssAlt], False);
end;
Автор: greenpc
Дата сообщения: 29.06.2006 15:35
OOD
попробуй вот это
[more]
Скопировать, удалить, вставить в TWebBrowser



uses
ActiveX;

// Copy the selected text to the clipboard
procedure TForm1.Button7Click(Sender: TObject);
begin
try
WebBrowser1.ExecWB(OLECMDID_COPY, OLECMDEXECOPT_PROMPTUSER);
except
end;
end;

// Cut the selected text
procedure TForm1.Button8Click(Sender: TObject);
begin
try
WebBrowser1.ExecWB(OLECMDID_CUT, OLECMDEXECOPT_PROMPTUSER);
except
end;
end;

// Delete the selected text
procedure TForm1.Button9Click(Sender: TObject);
begin
try
WebBrowser1.ExecWB(OLECMDID_DELETE, OLECMDEXECOPT_PROMPTUSER);
except
end;
end;


initialization
OleInitialize(nil);

finalization
OleUninitialize;
end.


или -----------------------------------------------

function FillForm(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean;
var
i, j: Integer;
FormItem: Variant;
begin
Result := False;
//no form on document
if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then
begin
Exit;
end;
//count forms on document
for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
begin
FormItem := WebBrowser.OleObject.Document.forms.Item(I);
for j := 0 to FormItem.Length - 1 do
begin
try
//when the fieldname is found, try to fill out
if FormItem.Item(j).Name = FieldName then
begin
FormItem.Item(j).Value := Value;
Result := True;
end;
except
Exit;
end;
end;
end;
end;


//When the document is complete try to fill out the field homepage with the url
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
if FillForm(WebBrowser1, 'homepage', 'http://www.swissdelphicenter.ch') = False then
ShowMessage('Error. Field not available or no Form found.');
end;

[/more]
Автор: ShIvADeSt
Дата сообщения: 30.06.2006 00:59
Внимание, все большие куски кода (более 5 строк) оформляем в тег [more] дабы уменьшить размер поста.
Автор: sunduk4
Дата сообщения: 30.06.2006 13:12
Кто разбирался с исходниками DBLookup, подскажите, пожалуйста, каким образом он реагирует на открытие и закрытие связанных с ним датасетов. Где копать?

Добавлено:
Вопрос снят, разобрался.
Автор: dyr farot
Дата сообщения: 30.06.2006 13:38
класс TDataLink
+ тут:
http://www.rsdn.ru/article/?420
почитай
Автор: greenpc
Дата сообщения: 30.06.2006 13:48
удалено
Автор: sunduk4
Дата сообщения: 30.06.2006 14:35
dyr farot

Спасибо! Хорошая статья.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Событие STFilter(DBGridEh) ???


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.