Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 06.04.2009, 16:51
elfer elfer вне форума
Новичок
 
Регистрация: 06.02.2009
Сообщения: 63
Репутация: 10
По умолчанию БД по сети

У меня таблицы на акцессе. Возможно ли работать по сети, или надо создавать таблицы на IB консоли. Пример: есть на 1 и 2 ПК программа в ней данные, по нажатию на кнопке на 3 компьютере (сервере) эти данные должны занестись в таблицу на сервере. Как этого можно достич?
Ответить с цитированием
  #2  
Старый 06.04.2009, 16:58
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Можно, расшарь файл базы
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #3  
Старый 06.04.2009, 16:58
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Например, с использованием многозвенки. При этом с какой БД работает сервер приложений для клиента абсолютно неважно. Но только учти, что будут проблемы с настройкой этой фигни.

Еще можно достаточно просто перенести базу на MS SQL Server. Тут вообще все просто тогда будет, хотя некоторый гимор с настройкой останется.

Можно написай свой слой для передачи данных по сети, но тут писать много придется, особенно, если требуется полная поддержка работы с БД.

Еще как вариант - файловый обмен. При нажатии кнопки формируется файл и выкладывается в шару, а на сервере програ этот файл читает и заносит данные в БД.

Так что вариантов масса. У каждого есть свои преимущества и недостатки.
Ответить с цитированием
  #4  
Старый 06.04.2009, 17:20
elfer elfer вне форума
Новичок
 
Регистрация: 06.02.2009
Сообщения: 63
Репутация: 10
По умолчанию

Подскажите а где можно найти литературу по этой теме.
Ответить с цитированием
  #5  
Старый 06.04.2009, 17:55
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

По какой из?
Ответить с цитированием
  #6  
Старый 06.04.2009, 18:29
Аватар для Dux
Dux Dux вне форума
Активный
 
Регистрация: 18.03.2008
Сообщения: 206
Репутация: 16
По умолчанию

А в чем проблема работы по сети. Работаю с access через ADO.. если база используется одним пользователем, то другой может просматривать в ReadOnly. Или вас интересует возможность одновременного редактирования?
Ответить с цитированием
  #7  
Старый 07.04.2009, 14:14
elfer elfer вне форума
Новичок
 
Регистрация: 06.02.2009
Сообщения: 63
Репутация: 10
По умолчанию

Там такая ситуация.
Во-первых по сетям я ни когда не работал (я не знаю ни одного сетевого компонента).
Во-вторых я хочу сделать так: На компьютерах (пусть их будет 3) есть клиентская программа. На сервере распологается главная программа. В ней таблица.
1. Для начала я хочу сделать так когда клиенты запускают клиентскую программу и на сервере в таблице появляются их IP адреса.
2. По нажатию клавиши на сервере данные клиентских программ (например с едитов) вносились в др. таблицу на сервере.
Если возможна то подскажите пожалуйста где можно прочесть подобную информацию, может литература.
Ответить с цитированием
  #8  
Старый 07.04.2009, 14:15
elfer elfer вне форума
Новичок
 
Регистрация: 06.02.2009
Сообщения: 63
Репутация: 10
По умолчанию

БД клиентские программы могут только просматривать, но не редактировать. Редактировать может только администратор через сервер.
Ответить с цитированием
  #9  
Старый 07.04.2009, 19:33
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

1.Если клиенты могут только просматривать, тогда как понимать это?
Цитата:
2. По нажатию клавиши на сервере данные клиентских программ (например с едитов) вносились в др. таблицу на сервере.
2.Если клиенты просматривают одну и туже информацию, то что должно записаться?
3.Если клиенты ничего не редактируют, то что является критерием для решения о занесении информации на серверную таблицу.
В общем куча вопросов. Более детально распишите что вы хотите.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #10  
Старый 09.04.2009, 14:46
elfer elfer вне форума
Новичок
 
Регистрация: 06.02.2009
Сообщения: 63
Репутация: 10
По умолчанию

Пишу подробнее.

Клиентская программа:
На форме Label1 и Edit1

Серврная программа:
DBGrid1
DBGrid2
Button1

Цель:
1.Занести данные в DBGrid1 (IP адрес ПК, и введенное число)
2.Найти максимальное число среди чисел введенные с клиентских программ в Edit1.
3.По нажатию на Button1 вывести максимальное число в Label1 всех клиенстких программ
4.Когда открывается клиентская программа в DBrid2 серверной программы высвечивается IP адрес компьютера.

У меня все таблицы на Акцессе
Ответить с цитированием
  #11  
Старый 10.04.2009, 09:58
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Я вам подкину примерчик небольшой, может он вам пригодиться:
Скомпилите и запустите несколько копий получившейся программы, вводите данные, должна работать синхронизация.
Код:
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
А по поводу получения IP, вот хороший примерчик
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 10.04.2009 в 11:59.
Ответить с цитированием
  #12  
Старый 10.04.2009, 14:31
elfer elfer вне форума
Новичок
 
Регистрация: 06.02.2009
Сообщения: 63
Репутация: 10
По умолчанию

1.Найти максимальное число среди чисел введенные с клиентских программ в Edit1.
2.По нажатию на Button1 вывести максимальное число в Label1 всех клиенстких программ
3.Когда открывается клиентская программа в DBrid2 серверной программы высвечивается IP адрес компьютера
Ответить с цитированием
  #13  
Старый 10.04.2009, 18:22
elfer elfer вне форума
Новичок
 
Регистрация: 06.02.2009
Сообщения: 63
Репутация: 10
По умолчанию

Подскажи как по нажатию кнопки в серверной программе выскакивала в клиентских программах сообщение любое. Я просто не знаю как связать клиентскую программу с серверной
Ответить с цитированием
  #14  
Старый 10.04.2009, 19:05
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Как таковой серверной программы нет, есть просто клиент подключившийся с административными правами. А клиентов между собой связывает общий файл базы данных. Сам файл базы служит своеобразным почтовым ящиком к которому клиенты обращаются за данными. Используя это можно сделать простую таблицу, куда помещать сообщение и имя или ip-адрес адресата. В программе, по аналогии с моим таймером, делаете свой обработчик который просто проверяет есть ли в этой таблице, сообщение адресованное текущему клиенту. Если есть, то выводит его на экран и удалаяет из таблицы запись содержащую сообщение.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #15  
Старый 11.04.2009, 10:30
elfer elfer вне форума
Новичок
 
Регистрация: 06.02.2009
Сообщения: 63
Репутация: 10
По умолчанию

Спасибо. Теперь стало намного понятней. А подскажи пожалуйста как можно узнать iр компьютера. А то по той стать которую ты порекомендовал у меня ошибки. Там с типом что то. Может есть другой способ?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:22.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter