![]() |
|
|
#1
|
|||
|
|||
|
У меня таблицы на акцессе. Возможно ли работать по сети, или надо создавать таблицы на IB консоли. Пример: есть на 1 и 2 ПК программа в ней данные, по нажатию на кнопке на 3 компьютере (сервере) эти данные должны занестись в таблицу на сервере. Как этого можно достич?
|
|
#2
|
||||
|
||||
|
Можно, расшарь файл базы
![]() |
|
#3
|
|||
|
|||
|
Например, с использованием многозвенки. При этом с какой БД работает сервер приложений для клиента абсолютно неважно. Но только учти, что будут проблемы с настройкой этой фигни.
Еще можно достаточно просто перенести базу на MS SQL Server. Тут вообще все просто тогда будет, хотя некоторый гимор с настройкой останется. Можно написай свой слой для передачи данных по сети, но тут писать много придется, особенно, если требуется полная поддержка работы с БД. Еще как вариант - файловый обмен. При нажатии кнопки формируется файл и выкладывается в шару, а на сервере програ этот файл читает и заносит данные в БД. Так что вариантов масса. У каждого есть свои преимущества и недостатки. |
|
#4
|
|||
|
|||
|
Подскажите а где можно найти литературу по этой теме.
|
|
#5
|
|||
|
|||
|
По какой из?
|
|
#6
|
||||
|
||||
|
А в чем проблема работы по сети. Работаю с access через ADO.. если база используется одним пользователем, то другой может просматривать в ReadOnly. Или вас интересует возможность одновременного редактирования?
|
|
#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р компьютера. А то по той стать которую ты порекомендовал у меня ошибки. Там с типом что то. Может есть другой способ?
|