Форум: "Потрепаться";
Текущий архив: 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.008 c