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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 07.07.2013, 08:57
grizzlylife@mail.ru grizzlylife@mail.ru вне форума
Прохожий
 
Регистрация: 05.07.2013
Сообщения: 5
Версия Delphi: Delphi 2007
Репутация: 10
Злость

Не хрена не получается создать эту базу, а еcли и получается то я не вижу смысла в ней..
Объясните мне, должно быть так - к первой таблице(устройств) к каждой записи у меня должна быть собственная таблица журнала? -так - да?
-
В итоге: у меня получается, что есть две таблице. Одна тупо справочник с индексами устройств. Другая огромный журнал всех устройств только с индексами из первой, ну и зачем тогда это все....
Вот что получилось:
Вложения
Тип файла: zip Logger.mdb.zip (21.9 Кбайт, 4 просмотров)
Ответить с цитированием
  #17  
Старый 07.07.2013, 11:17
Аватар для Freeman
Freeman Freeman вне форума
Местный
 
Регистрация: 05.10.2012
Адрес: Санкт-Петербург
Сообщения: 577
Версия Delphi: 6
Репутация: выкл
По умолчанию

Цитата:
Сообщение от grizzlylife@mail.ru
Другая огромный журнал всех устройств только с индексами из первой, ну и зачем тогда это все....
Вам тут насоветуют, ага. Если устройства имеют уникальный 8-байтовый ключ, ваша задача вполне подходит под критерий использования натуральных ключей. Они ведь еще и аппаратно прошитые, так ведь?

В этом случае все логи пишутся в одну большую таблицу, ключ которой (device_id, event_time). Поле device_id -- тот самый 8-байтовый ключ, event_time -- обычная дата-время. Тип device_id, думаю, лучше всего сделать float или даже money, примерно так:
Код:
create table log(
  device_id money,
  event_time datetime,
  state integer,
  primary key (device_id, event_time)
);
Можно, конечно, сделать его и binary(8), но в этом случае его не будет видно в гриде и сложно использовать в запросах как параметр.

Остальные таблицы создаются по мере надобности и носят вспомогательный характер.

Кстати. Не имея на компе установленного Access, пользовался своей поделкой, когда-то начатой как Access Explorer -- программы с возможностью визуального просмотра данных и исполнения скриптов (!) для JetDB (Access), по аналогии с TOAD или SQLiteSpy. Прикладываю. После открытия файла нажать кнопку "Query", на появившейся вкладке писать запросы и/или команды, разделяя их пустой строкой, нажимать Ctrl+Enter для выполнения команды, на которой стоит курсор. Обновление списка таблиц -- по F5. Успехов.
Вложения
Тип файла: 7z Axe.7z (285.4 Кбайт, 1 просмотров)
Ответить с цитированием
  #18  
Старый 07.07.2013, 19:06
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

В общем вот вам эмулятор работы датчиков с записью их работы в БД:
Код:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, StdCtrls;

type
  TSensor = class(TThread)
   ID: Integer;
   function ReadSensor: Boolean;
   procedure Execute; override;
  end;

  TForm3 = class(TForm)
    AppDB: TADOConnection;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    Sensors: Array of TSensor;
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);
Var
  i: Integer;
  Q: TAdoQuery;
begin
 if Button1.Caption = 'Start'
 then begin
      Button1.Caption := 'Finish';
      SetLength(Sensors, 0);
      Q := TAdoQuery.Create(nil);
      Q.Connection := Form3.AppDB;
      Q.SQL.Text := 'select * from Датчики';
      Q.Open;
      while not Q.Eof
      do begin
         SetLength(Sensors, Length(Sensors)+1);
         Sensors[High(Sensors)] := TSensor.Create(True);
         Sensors[High(Sensors)].ID := Q.FieldValues['Код'];
         Sensors[High(Sensors)].Resume;
         Q.Next;
         end;
      Q.Free;
      end
 else begin
      Button1.Caption := 'Start';
      for i := 0 to Length(Sensors) - 1
      do Sensors[i].Terminate;
      end;
end;

procedure TSensor.Execute;
Var
  Q: TAdoQuery;
begin
 inherited;
 while not Terminated
 do begin
    Sleep(10);
    if ReadSensor
    then begin
         Q := TAdoQuery.Create(nil);
         Q.Connection := Form3.AppDB;
         Q.SQL.Text := 'insert into Журнал (КодДатчика,Регистрация) Values(:КодДатчика,:Регистрация)';
         Q.Parameters.ParamValues['КодДатчика'] := ID;
         Q.Parameters.ParamValues['Регистрация'] := Now;
         Q.ExecSQL;
         Q.Free;
         end;
    end;
end;

function TSensor.ReadSensor: Boolean;
begin
 Result := Random(2) = 1;
end;

end.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 07.07.2013 в 19:09.
Ответить с цитированием
Ответ


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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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