|
#1
|
|||
|
|||
БД по сети
У меня таблицы на акцессе. Возможно ли работать по сети, или надо создавать таблицы на IB консоли. Пример: есть на 1 и 2 ПК программа в ней данные, по нажатию на кнопке на 3 компьютере (сервере) эти данные должны занестись в таблицу на сервере. Как этого можно достич?
|
#2
|
||||
|
||||
Можно, расшарь файл базы
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
|||
|
|||
Например, с использованием многозвенки. При этом с какой БД работает сервер приложений для клиента абсолютно неважно. Но только учти, что будут проблемы с настройкой этой фигни.
Еще можно достаточно просто перенести базу на MS SQL Server. Тут вообще все просто тогда будет, хотя некоторый гимор с настройкой останется. Можно написай свой слой для передачи данных по сети, но тут писать много придется, особенно, если требуется полная поддержка работы с БД. Еще как вариант - файловый обмен. При нажатии кнопки формируется файл и выкладывается в шару, а на сервере програ этот файл читает и заносит данные в БД. Так что вариантов масса. У каждого есть свои преимущества и недостатки. |
#4
|
|||
|
|||
Подскажите а где можно найти литературу по этой теме.
|
#5
|
|||
|
|||
По какой из?
|
#6
|
||||
|
||||
А в чем проблема работы по сети. Работаю с access через ADO.. если база используется одним пользователем, то другой может просматривать в ReadOnly. Или вас интересует возможность одновременного редактирования?
Delphicode.org - справочник Delphi |
#7
|
|||
|
|||
Там такая ситуация.
Во-первых по сетям я ни когда не работал (я не знаю ни одного сетевого компонента). Во-вторых я хочу сделать так: На компьютерах (пусть их будет 3) есть клиентская программа. На сервере распологается главная программа. В ней таблица. 1. Для начала я хочу сделать так когда клиенты запускают клиентскую программу и на сервере в таблице появляются их IP адреса. 2. По нажатию клавиши на сервере данные клиентских программ (например с едитов) вносились в др. таблицу на сервере. Если возможна то подскажите пожалуйста где можно прочесть подобную информацию, может литература. |
#8
|
|||
|
|||
БД клиентские программы могут только просматривать, но не редактировать. Редактировать может только администратор через сервер.
|
#9
|
||||
|
||||
1.Если клиенты могут только просматривать, тогда как понимать это?
Цитата:
3.Если клиенты ничего не редактируют, то что является критерием для решения о занесении информации на серверную таблицу. В общем куча вопросов. Более детально распишите что вы хотите. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#10
|
|||
|
|||
Пишу подробнее.
Клиентская программа: На форме Label1 и Edit1 Серврная программа: DBGrid1 DBGrid2 Button1 Цель: 1.Занести данные в DBGrid1 (IP адрес ПК, и введенное число) 2.Найти максимальное число среди чисел введенные с клиентских программ в Edit1. 3.По нажатию на Button1 вывести максимальное число в Label1 всех клиенстких программ 4.Когда открывается клиентская программа в DBrid2 серверной программы высвечивается IP адрес компьютера. У меня все таблицы на Акцессе |
#11
|
||||
|
||||
Я вам подкину примерчик небольшой, может он вам пригодиться:
Скомпилите и запустите несколько копий получившейся программы, вводите данные, должна работать синхронизация. Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, DBCtrls, DB, Grids, DBGrids, ADODB, StdCtrls; type TForm1 = class(TForm) ADOConnection1: TADOConnection; tDemo: TADOTable; DBGrid1: TDBGrid; dsDemo: TDataSource; DBNavigator1: TDBNavigator; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin AdoConnection1.Open; if not AdoConnection1.Connected then begin ShowMessage('Не подключились :('); Exit; end; tDemo.Open; end; procedure TForm1.Timer1Timer(Sender: TObject); Var CurPos: Integer; begin if tDemo.State in [dsEdit,dsInsert] then Exit; CurPos := tDemo.RecNo; tDemo.Requery([eoAsyncFetch]); tDemo.RecNo := CurPos; end; end. Код:
object Form1: TForm1 Left = 286 Top = 199 Width = 642 Height = 410 Caption = 'Form1' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False OnCreate = FormCreate DesignSize = ( 634 376) PixelsPerInch = 96 TextHeight = 13 object DBGrid1: TDBGrid Left = 8 Top = 8 Width = 619 Height = 322 Anchors = [akLeft, akTop, akRight, akBottom] DataSource = dsDemo TabOrder = 0 TitleFont.Charset = DEFAULT_CHARSET TitleFont.Color = clWindowText TitleFont.Height = -11 TitleFont.Name = 'Tahoma' TitleFont.Style = [] end object DBNavigator1: TDBNavigator Left = 8 Top = 338 Width = 240 Height = 25 DataSource = dsDemo Anchors = [akLeft, akBottom] TabOrder = 1 end object ADOConnection1: TADOConnection Connected = True ConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Se' + 'ttings\Администратор\Мои документы\demo.mdb;Mode=Share Deny None' + ';Persist Security Info=False' CursorLocation = clUseServer LoginPrompt = False Mode = cmShareDenyNone Provider = 'Microsoft.Jet.OLEDB.4.0' Left = 496 Top = 8 end object tDemo: TADOTable Connection = ADOConnection1 CursorLocation = clUseServer CursorType = ctStatic TableName = 'Table1' Left = 528 Top = 8 end object dsDemo: TDataSource DataSet = tDemo Left = 560 Top = 8 end object Timer1: TTimer Interval = 500 OnTimer = Timer1Timer Left = 600 Top = 8 end end Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 10.04.2009 в 11:59. |
#12
|
|||
|
|||
1.Найти максимальное число среди чисел введенные с клиентских программ в Edit1.
2.По нажатию на Button1 вывести максимальное число в Label1 всех клиенстких программ 3.Когда открывается клиентская программа в DBrid2 серверной программы высвечивается IP адрес компьютера |
#13
|
|||
|
|||
Подскажи как по нажатию кнопки в серверной программе выскакивала в клиентских программах сообщение любое. Я просто не знаю как связать клиентскую программу с серверной
|
#14
|
||||
|
||||
Как таковой серверной программы нет, есть просто клиент подключившийся с административными правами. А клиентов между собой связывает общий файл базы данных. Сам файл базы служит своеобразным почтовым ящиком к которому клиенты обращаются за данными. Используя это можно сделать простую таблицу, куда помещать сообщение и имя или ip-адрес адресата. В программе, по аналогии с моим таймером, делаете свой обработчик который просто проверяет есть ли в этой таблице, сообщение адресованное текущему клиенту. Если есть, то выводит его на экран и удалаяет из таблицы запись содержащую сообщение.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#15
|
|||
|
|||
Спасибо. Теперь стало намного понятней. А подскажи пожалуйста как можно узнать iр компьютера. А то по той стать которую ты порекомендовал у меня ошибки. Там с типом что то. Может есть другой способ?
|