Вопрос № 64526: Здравствуйте, уважаемые эксперты! Помогите, пожалуйста разораться с кодом(в прил.). Объясните, пожалуйста, что делает строчка OverWrite.hEvent := CreateEvent(nil, True, False, nil);? И для чего
в if (not WriteFile(hPort, WriteBytes, SizeOf(Write...Вопрос № 64585: Здравствуйте Уважаемые Мастера!!!
У меня такой вопрос перечитал в пяти книгах по программированию все о работе с параметрами для компонентов Query и составление запросов с применение параметров. Но единой картины по работе так и не сложилось...Вопрос № 64609: Ув. эксперты.
Возник небольшой вопрос:
моя программа лежит на сервере и мне надо знать как программно определить кто в данный момент запустил эту программу.
Например чтоб в Лабеле выводилось - в данный момент программа запущенна компьютер...Вопрос № 64663: В ЛВС офиса установлен сервер Firebird, БД и программа, которая с этой базой работает.
Заказчик хочет иметь такую же БД и программу на своем ноутбуке. Ему нужно работать (в т.ч. вводить/изменять данные) в поездках. Вернувшись в офис он должен зап...
Вопрос № 64.526
Здравствуйте, уважаемые эксперты! Помогите, пожалуйста разораться с кодом(в прил.). Объясните, пожалуйста, что делает строчка OverWrite.hEvent := CreateEvent(nil, True, False, nil);? И для чего
в if (not WriteFile(hPort, WriteBytes, SizeOf(WriteBytes),
dwWrite, @OverWrite)) знак "@" перед OverWrite? И что за тип TOverlapped? Заранее очень благодарен!
Отвечает: sir henry
Здравствуйте, Андрющенко Вячеслав Васильевич!
1. Судя по тому, что пишет нам хелп, функция CreateEvent() создает объект-событие.
Параметры:
lpEventAttributes: PSecurityAttributes - это указатель на специальную структуру, которая определяет права доступа. Если вместо нее указать NIL, то "заходи кто хочешь, бери что хочешь". :)
bManualReset - определяет нужна ли вручную проводить реинициализацию объекта. Если задать True, то нужно вызывать дополнительную функцию с помощью ResetEvent(Handle_объекта), если False, то Windows сама химичит.
bInitialState - если честно не понял что это такое. True - выдает при инициализации сигнал, False - не выдает.
lpName - ну это понятно - задание имени объекта. Если поставить NIL, то объект будет безымянный.
2. @ - означает, что в функцию в качестве параметра передается не значение переменной, а адрес в памяти, где она находится, аналогичен Паскалевскому var. Увеличивает скорость выполнения функции, т.к. не создается второй экземпляр переменной для работы в функции.
3. TOverlapped - это специальная структура в которой задается информация для правильной работы асинхронного ввода-вывода. В том числе и тот самый объект-событие, который выдает (или не выдает) тот самый таинственный сигнал, прежде чем заработает функция WriteFile(), т.к. WriteFile() тоже функция ввода вывода и может работать как в синхронном, так и в асинхронном режиме.
Ответ отправил: sir henry (статус: Академик) Россия, Красноярск ---- Ответ отправлен: 28.11.2006, 04:45 Оценка за ответ: 5
Вопрос № 64.585
Здравствуйте Уважаемые Мастера!!!
У меня такой вопрос перечитал в пяти книгах по программированию все о работе с параметрами для компонентов Query и составление запросов с применение параметров. Но единой картины по работе так и не сложилось. В приложение привожу код примера по вставке записи в таблицу, значение берется из Edit1. Но появляется сообщение "Поле house.num_home не может содержать значение Null так как свойство Required имеет значение true. Введите значение в поле "
Прошу Вас не могли бы Вы систематизировать мои знания, и что я делаю неправильно. Как правильно должен выглядеть приведенный код.
Спасибо большое всем откликнувшимся
Приложение:
Отправлен: 28.11.2006, 13:16
Вопрос задал: Tresda (статус: 1-ый класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: PaVeL_Ekt
Здравствуйте, Tresda!
Попробуйте вот так:
while ADOQuery1 do
SQL.Clear;
SQL.add('insert into house (num_house, address, raion) values (:num_home, :address, :raion)');
Parameters.ParamValues['num_home']:=edit1.text;
Parameters.ParamValues['address']:=edit2.text;
Parameters.ParamValues['raion']:=edit1.text;
open;
end;
--------- Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 6-ой класс)
Ответ отправлен: 28.11.2006, 13:41
Вопрос № 64.609
Ув. эксперты.
Возник небольшой вопрос:
моя программа лежит на сервере и мне надо знать как программно определить кто в данный момент запустил эту программу.
Например чтоб в Лабеле выводилось - в данный момент программа запущенна компьютером comp и было бы вообще просто супер если бы существовала еще и возможность вывести пользователя, который сейчас на этом компе залогинен, тоесть запускает програму(у нас домен).
Отправлен: 28.11.2006, 17:29
Вопрос задал: Master135 (статус: Студент)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Кулаков Антон Сергеевич /SandroNec
Здравствуйте, Master135!
Я бы посоветовал вам в случае если программа не СУБД, то написать клиент серверную версию вашей программы. Если это СУБД то проще регистрировать пользователей прямо в базе. там же и хранить имена, пароли и прочие данные о пользователе. Если правильно все это завязать то можно будет даже отследить какой пользователь с какой таблицей работает.
Удачи. И в следующий раз уточняйте хотя бы примерно, что делает ваша программа. Тогда легче отвечать будет
--------- Настоящий программист на вопрос - "можешь ли ты это сделать", всегда ответит - "да", а потом подумает как
Ответ отправил: Кулаков Антон Сергеевич /SandroNec (статус: 3-ий класс)
Ответ отправлен: 29.11.2006, 05:54 Оценка за ответ: 3 Комментарий оценки: Я разве что-то говорил про клиент-серверную технологию. Я просто сказал, что программа лежит на сервере, пользователь заходит на сервер и запускает программу. А что она делает - абсолютно неважно. Никакой базы там нет. Надо внимательнее читать вопрос.
Вопрос № 64.663
В ЛВС офиса установлен сервер Firebird, БД и программа, которая с этой базой работает.
Заказчик хочет иметь такую же БД и программу на своем ноутбуке. Ему нужно работать (в т.ч. вводить/изменять данные) в поездках. Вернувшись в офис он должен запустить некую программу-синхронизатор, которая в обеих базах приведет все записи в актуальное состояние. Критерий актуальности - время последнего обновления записи. Соответствующие поля в базе имеются.
Прошу совета у всех, кто решал подобные задачи, имеет идеи или ссылки. В частности, интересует организация работы программы одновременно с двумя базами, расположенными на разных машинах.
Спасибо.
Vitaly Grobshtein
Отправлен: 28.11.2006, 22:12
Вопрос задал: Vitaly (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Melamed
Здравствуйте, Vitaly!
Вам следует использовать модель briefcase.
Прочитать об этой модели можно в следующих статьях
http://www.rsdn.ru/article/db/briefcase1.xml и http://www.rsdn.ru/article/db/midas_briefcase.xml
Желаю удачи
Ответ отправил: Melamed (статус: 8-ой класс)
Ответ отправлен: 28.11.2006, 23:56 Оценка за ответ: 3 Комментарий оценки: Описанная в статье технология предполагает, что мобильный пользователь работает не с БД, а с неким локальным кешем формата XML. Мне же нужно использовать на ноутбуке уже готовую программу и базу FirebBird. Тем не менее, спасибо.
Отвечает: PaVeL_Ekt
Здравствуйте, Vitaly!
для синхронизации бд можно написать программу - сервер и программу клиент.
программа клиент выбирает записи из ноутбука начиная с первой и посылает запись в программу сервер, программа сервер получая данные проверяет их в бд офиса и если запись более новая то отправляет ответ с новой записью, в противном случае отправляет ответ о том, что данные новые и заносит их к себе в базу.
а реализоваться это будет посредствам idTCPclient и подобных, кстати можно воспользоваться NMMSG (даже наверно лучше им)
--------- Да поможет Вам F1, да сохранит Вас F2, во имя CTRL, ALT и святого DEL
Ответ отправил: PaVeL_Ekt (статус: 6-ой класс)
Ответ отправлен: 29.11.2006, 06:14 Оценка за ответ: 2 Комментарий оценки: Я не просил рассказать о принципах репликации. Мне нужен совет по одновременной работе программы с двумя базами и двумя серверами Firebird.