![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#16
|
|||
|
|||
|
Не хрена не получается создать эту базу, а еcли и получается то я не вижу смысла в ней..
Объясните мне, должно быть так - к первой таблице(устройств) к каждой записи у меня должна быть собственная таблица журнала? -так - да? - В итоге: у меня получается, что есть две таблице. Одна тупо справочник с индексами устройств. Другая огромный журнал всех устройств только с индексами из первой, ну и зачем тогда это все.... Вот что получилось: |
|
#17
|
||||
|
||||
|
Цитата:
В этом случае все логи пишутся в одну большую таблицу, ключ которой (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) ); Остальные таблицы создаются по мере надобности и носят вспомогательный характер. Кстати. Не имея на компе установленного Access, пользовался своей поделкой, когда-то начатой как Access Explorer -- программы с возможностью визуального просмотра данных и исполнения скриптов (!) для JetDB (Access), по аналогии с TOAD или SQLiteSpy. Прикладываю. После открытия файла нажать кнопку "Query", на появившейся вкладке писать запросы и/или команды, разделяя их пустой строкой, нажимать Ctrl+Enter для выполнения команды, на которой стоит курсор. Обновление списка таблиц -- по F5. Успехов. |
|
#18
|
||||
|
||||
|
В общем вот вам эмулятор работы датчиков с записью их работы в БД:
Код:
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. |