Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];

Вниз

---|Ветка была без названия|---   Найти похожие ветки 

 
Rulja   (2003-07-10 08:27) [0]

Большое спасибо всем за участие в обсуждении моего предыдущего вопроса, но объясните для чайника, что делать. В сервере Database, Table и Datasetprovider. В клиенте DCOMConnection, Clientdataset. Нужно перенести клиента на пользовательскую машину, КАК? Заранее благодарен. Кстати (в связи с прошлым обсуждением) по крайней мере я за попытку помочь никого крайним не считаю, напротив ВСЕМ участникам объсуждения ОГРОМНОЕ СПАСИБО.


 
Nikolay M.   (2003-07-10 09:53) [1]

http://www.yandex.ru/yandsearch?text=dcom+midas&rpt=rad
http://rsdn.ru/
http://citforum.ru/
\Borland\Delphi6\Demos\Midas

Только маленький вопрос: DCOM - а оно тебе надо? Почему не SocketConnection?


 
Rulja   (2003-07-10 10:54) [2]


> Только маленький вопрос: DCOM - а оно тебе надо? Почему
> не SocketConnection?
Чрез Socket не получается сохранить данные измененные клиентом в базу данных сервера. Пока получилось только с DCOM (сработала такая вещь Tabl.Database.AppluApdate.([Tabl]);), если поможеш обойти эти грабли, то воспользуюсь Socket и буду ТЕБЕ ГЛУБОКО ПРИЗНАТЕЛЕН.


 
Murad   (2003-07-10 11:10) [3]

2Rulja
Прости что не в тему, посмотрел в регистрационной инфе, что ты из города Грайворон... Где это? случайно не на Украине?



 
Romkin   (2003-07-10 11:28) [4]

Как это не получается? Ты как сохраняешь? у тебя на клиенте должны валяться только TClientDataset...
И все отлично идет. К предыдущим ссылкам добавлю:
http://www.techvanguards.com
Есть и просто статьи на этом сайте и на rsdn.ru по MIDAS


 
Nikolay M.   (2003-07-10 11:40) [5]


> не получается сохранить данные измененные клиентом в базу
> данных сервера

Присоединяюсь к Роману - все изменения сохраняются, никаких граблей здесь нет. Не видя кода, трудно что-то сказать. На вскидку: может ClientDataset, DatasetProvider или Table случайно выставились в ReadOnly? А вообще напиши, каким образом вносишь изменения и сохраняешь их в базу.


 
clickmaker   (2003-07-10 11:43) [6]

Nikolay M. © (10.07.03 09:53)

Только маленький вопрос: DCOM - а оно тебе надо? Почему не SocketConnection?


Для SocketConnection нужен Borland Socket Server. А для DCOM только сама винда :)


 
Romkin   (2003-07-10 11:45) [7]

Угу. И руки, чтобы все это сконфигурировать. Причем сервером может быть только WinNT, и домен должен присутствовать.


 
clickmaker   (2003-07-10 11:48) [8]

То что "сервером может быть только WinNT" - это только плюс, потому что win9x/ME надежностью не отличаются. И наличие домена вовсе не обязательно, хотя и желательно. Секьюрити ж можно по-всякому настроить. Просто, когда есть домен - это проще, да и вряд ли вы найдете серьезную контору, которая замахнется на трехзвенку, а домен при этом организовывать не будет


 
Nikolay M.   (2003-07-10 11:53) [9]


> Причем сервером может быть только WinNT

А заплатка DCOM от мелкомягких для Win 9X? Правда, не знаю, насколько устойчиво это будет работать, да и будет ли вообще :) Я бы не рискнул, разве что в качестве эксперимента...


 
Romkin   (2003-07-10 12:02) [10]

Я бы тоже не рискнул :-)
Не идет MIDAS иначе чем на NT... Один раз удалось сделать, но насчет воспроизвести - ой! Танцы с бубном. Да и был случай, когда у заказчика я просто не смог подключится к серверу NT по DCOM. До сих пор не знаю, почему, все было выставлено, все сравнивали по семь раз с тестовой конфигурацией, пословно, в реестре... Не идет сервер, и все! Нафиг, в TSocketConnection еще и шифрование трафика элементарно встроить ;-)
А серьезных контор, у которых нет домена и вообще NT - полно. Ну не надо им... Не ориентироваться же только на компьютерные фирмы с 300+ сотрудников?
Хоть win9x и менее надежны - все в твоих руках в этом случае.
У меня за N лет работы с этими системами потерь данных на трехзвенке не было ;-)
Могу сказать, что, конечно, наличие BSS не слишком радует, однако работает, и все нормально получается


 
Nikolay M.   (2003-07-10 12:12) [11]


> А серьезных контор, у которых нет домена и вообще NT - полно

Точно! :)
Вот наша, например. А за локалкой так вообще никто не следит. Ну не надо это нам! :)

PS
Ром, а к тебе можно в аську стукнуться? ;)


 
Romkin   (2003-07-10 12:15) [12]

Ну попробуй... Угадай, чем я занимаюсь? Переписываю одно приложение заново...


 
Nikolay M.   (2003-07-10 12:18) [13]


> Угадай, чем я занимаюсь?

Это уже какая версия по счету будет? Третья? Вот ведь, блин... :)
Хотя я нас самом деле тоже в одном проекте 3 года варюсь...


 
Rulja   (2003-07-10 13:09) [14]


> Прости что не в тему, посмотрел в регистрационной инфе,
> что ты из города Грайворон... Где это? случайно не на Украине?
Почти угадал. Белгородская область. Граница района на 70% с Украиной, приграничный район.


 
Rulja   (2003-07-10 13:15) [15]


> Не видя кода, трудно что-то сказать.
Сервер:

unit UMProbServ;

{$WARN SYMBOL_PLATFORM OFF}

interface

uses
Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr,
DBClient, ProbServer_TLB, StdVcl, Provider, DB, DBTables;

type
TProbSrv = class(TRemoteDataModule, IProbSrv)
Database1: TDatabase;
Table1: TTable;
DataSetProvider1: TDataSetProvider;
procedure RemoteDataModuleCreate(Sender: TObject);
procedure RemoteDataModuleDestroy(Sender: TObject);
procedure DataSetProvider1AfterApplyUpdates(Sender: TObject;
var OwnerData: OleVariant);
private
{ Private declarations }
protected
class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
public
{ Public declarations }
end;

implementation
uses ProbS;
{$R *.DFM}

class procedure TProbSrv.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string);
begin
if Register then
begin
inherited UpdateRegistry(Register, ClassID, ProgID);
EnableSocketTransport(ClassID);
EnableWebTransport(ClassID);
end else
begin
DisableSocketTransport(ClassID);
DisableWebTransport(ClassID);
inherited UpdateRegistry(Register, ClassID, ProgID);
end;
end;

procedure TProbSrv.RemoteDataModuleCreate(Sender: TObject);
begin
Form1.Label2.Caption:=IntToStr(StrToInt(Form1.Label2.Caption)+1);
end;

procedure TProbSrv.RemoteDataModuleDestroy(Sender: TObject);
begin
Form1.Label2.Caption:=IntToStr(StrToInt(Form1.Label2.Caption)-1);
end;

procedure TProbSrv.DataSetProvider1AfterApplyUpdates(Sender: TObject;
var OwnerData: OleVariant);
begin
Table1.Database.ApplyUpdates([Table1]);
Form1.Caption:="Сохранено";
end;

initialization
TComponentFactory.Create(ComServer, TProbSrv,
Class_ProbSrv, ciMultiInstance, tmApartment);
end.


Клиент:
unit Klient;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, DB, DBClient, MConnect, ExtCtrls, DBCtrls,
Grids, DBGrids;

type
TForm1 = class(TForm)
DataSource1: TDataSource;
ClientDataSet1: TClientDataSet;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
DCOMConnection1: TDCOMConnection;
BitBtn1: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ClientDataSet1.ApplyUpdates(-1);
end;

end.


 
Nikolay M.   (2003-07-10 13:24) [16]

Имхо,


> procedure TProbSrv.DataSetProvider1AfterApplyUpdates(Sender:
> TObject;
> var OwnerData: OleVariant);
> begin
> Table1.Database.ApplyUpdates([Table1]);
> Form1.Caption:="Сохранено";
> end;


здесь все-таки лишнее.

Посмотри Borland\Delphi6\Demos\Midas\Login.
Только там ClientDataSet1.ApplyUpdates(-1) нужно еще добавить и DCOMConnection поменять на SocketConnection - прекрасно работает, сохраняет.
Btw, а у тебя пишет какую-то ошибку или просто не сохраняет?


 
Rulja   (2003-07-10 16:38) [17]


> Btw, а у тебя пишет какую-то ошибку или просто не сохраняет?
Если поставить проверку результата работы ApplyUpdates то с Socket выдает ошибку, а с DCOM работает нормально.
Кстати, а как управлять транзакциями без Table1.Database.ApplyUpdates([Table1]);?
Если через
Database.StartTransaktion
Database.Commit;
то у меня не получилось.


 
Nikolay M.   (2003-07-10 17:14) [18]


> результата работы ApplyUpdates то с Socket выдает ошибку

Гы :)
А какую? :)
Может, у тебя просто scktsrvr.exe не запущен?


> Кстати, а как управлять транзакциями

Тип БД?


 
Rulja   (2003-07-11 08:13) [19]


> Может, у тебя просто scktsrvr.exe не запущен?
Запущен, с сервером соединяется, в клиенте изменения видно но в базу вносить не хочет.


> А какую? :)
Выдает результ работы ApplyUpdate т.е. если изменили 1 запись 1 ошибка, 5 записей 5 ошибок, и нет события DataSetProvider.ApplyUpdate на которое я вешал управление транзакциями.


> Тип БД?
Таблицы dBASE и Paradox.


 
Nikolay M.   (2003-07-11 10:04) [20]


> Запущен, с сервером соединяется, в клиенте изменения видно
> но в базу вносить не хочет.

Мистика, не иначе :)
Пришли мне на nikolay_malushevNOSPAM@mail.ru исходники, даже интересно стало. Только NOSPAM убери :)


> Таблицы dBASE и Paradox.

ИМХО, лучше пользоваться CachedUpdates. Почитай BDE32.HLP, там и про транзакции с парадоксом написано. Но все равно у тебя транзакция создается неявно на клиенте, пока ты не сделаешь ClientDataSet.Apply(Cancel)Updates, поэтому, имхо, заморочки с DataSetProvider1AfterApplyUpdates излишни.


 
Romkin   (2003-07-11 10:45) [21]

А вот транзакций не надо, dBase - допустимо изменение в транзакции не более 100 записей (не важно, в одной таблице или нет), в PDox - не более 256.
Если очень хочется, TClientDataSet в любом случае работает в режиме CachedUpdates, зачем они еще и на сервере.
Кстати, у TDataSetProvider должно быть ResolveToDataSet = True в этом случае. Тогда все события TTable будут отрабатывать


 
Rulja   (2003-07-14 08:43) [22]


> Но все равно у тебя транзакция создается неявно на клиенте,
> пока ты не сделаешь ClientDataSet.Apply(Cancel)Updates,
> поэтому, имхо, заморочки с DataSetProvider1AfterApplyUpdates
> излишни.



> Если очень хочется, TClientDataSet в любом случае работает
> в режиме CachedUpdates, зачем они еще и на сервере.


Не знаю в чем дело, но без неявной транзакции работать не хочет. С явной еще не пробовал. Хотя все остальное в данный момент работает с любой машины как и хотелось. ОГРОМНОЕ СПАСИБО ЗА ПОМОЩЬ.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.009 c
1-100769
Aleksandr
2003-07-15 15:52
2003.07.31
Допустимо ли такое обращение со строками в DLL?


11-100657
nsvi
2002-11-29 13:14
2003.07.31
Глюк? Или нет?


14-100929
Шишкин Илья
2003-07-14 09:27
2003.07.31
Оцените программу


4-101035
demonyator
2003-05-25 15:57
2003.07.31
Событие минимизации другого окна.


1-100750
Arhangel
2003-07-16 12:23
2003.07.31
Button1 динамически





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский