|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#16
|
|||
|
|||
Можно и через TTable сделать, установить сортировку и фильтрацию. Но проще через TQuery.
|
#17
|
|||
|
|||
В запросе
Выбор из таблицы SrcTable. Что такое SrcTable? SELECT * FROM SrcTable отбираются поле id равные :PID. :PID это индексное первое поле в таблице Project ? WHERE PROJECT_ID = :PID И сортируются в порядке возрастания? ORDER BY ID ASC В каком обработчике писать этот запрос ? |
#18
|
|||
|
|||
SrcTable - имя таблицы из которой производится выборка
:PID - параметр. Сюда надо будет "положить" ID из таблицы проектов И да, сортировка по возрастанию по полю ID В том, в котором выбирается проект. Выбрал проект - положи его ID в параметр и выполни запрос. |
#19
|
|||
|
|||
Я так передавал имя проекта в табл 1 и одновременно поиском делал текущим.
Код:
if not (ComboBox1.Text='') then begin if not Table1.Locate('Projname',ComboBox1.Text,[]) then begin Table1.Insert; Table1.FieldByName('Projname').AsString:=ComboBox1.Text; Form1.Caption:=Table1.FieldByName('Projname').AsString; Table1.Post; Последний раз редактировалось Maks19, 27.06.2019 в 10:48. |
#20
|
|||
|
|||
Я хотел подключить dbgrid к query1,т.е чтобы в dbgrid отобразились поля ,как при компоненте table, а у меня вышло сообщение query1:no sql statement available
|
#21
|
|||
|
|||
ну тебе же говорят - нету запроса. Надо ввести запрос, что бы DBGrid смог его выполнить и получить имена колонок.
|
#22
|
|||
|
|||
Я вот так написал :
Код:
Query1.Close; Query1.SQL.Clear; Query1.SQL.Add ('SELECT*FROM TableRezult.db'); Query1.SQL.Add ('WHERE Table1.RecNo=:PID'); Query1.SQL.Add('ORDER BY ID ASC'); Query1.Open; lmikle: пользуемся тегами для оформления кода. последнее предупреждение. Но строчка Query1.SQL.Add ('WHERE Table1.RecNo=:PID') вызывает ошибку. Pid этот параметр так и записывать? И куда он передается? RecNo я хотел вернуть номер id у таблицы 1. Последний раз редактировалось lmikle, 28.06.2019 в 19:41. |
#23
|
|||
|
|||
Вызывает ошибку, т.к. в запросе нет такой таблицы "Table1". Более того, тут этот префикс просто не нужен, т.к. левая часть, имя поля, предполягает именно поле таблицы, из которой производится быборка.
А парамет PID заполняется перед ВЫПОЛНЕНИЕМ запроса через специальное св-во. Код:
... Query1.ParamByName('PID').AsInteger := Table1.FieldByName('ID').AsInteger; Query1.Open; ... PS. Ну вот ответь на вопрос - ЗАЧЕМ? ЗАЧЕМ ты хочешь использовать БД ничего не понимая и не зная в этой области. Чем тебе обычный файл не угодил? Написать сериализацию/десериализацию для подобной структуры занимает макс. 1 час. Более того, ты ее все-равно будешь писать, только в извращенном виде заполнения БД данными, которые не очень-то подходят для хранения в БД (точнее их структура не ложится на БД, имеется в виду обычные, так сказать классические, реляционные БД). |
#24
|
|||
|
|||
Цитата:
С базами хотел разобраться. Как хранить данные в базе. |
#25
|
|||
|
|||
Ну, например, писать данные в один и тот же файл. Какая точно структура данных?
|
#26
|
|||
|
|||
Проект это любое не повторяющееся буквенное или числовое значение.
Ввод данных происходит через 11 Edit и еще три edit (12,13,14) становятся активные по checkbox, если не активный то edit 12, 13,14 равны 0. Выходные данные массив 6x19 числовые данные. Т. е нужно сохранить все данные после закрытия окна программы, чтобы данные не исчезали. Привязка исходных данных и результатов должна быть к проекту. Т .е одному проекту свой набор исх. данных и результатов. При выборе (переходе от одного проекта к другому) в полях ввода editax также должны меняться исх. данные, т. е перешел к другому проекту в editax должны отобразиться соответствующие данные. |
#27
|
|||
|
|||
Вот класс для хранения всего этого добра в одном файле:
Код:
unit Unit2; interface uses Classes, SysUtils; type TModel = class private procedure Init; public PrjName : String; Results : Array[1..6,1..19] Of Integer; Sources : Array[1..14] Of Integer; Enabled_12_14 : Boolean; constructor Create; constructor Load(AStream : TStream); overload; constructor Load(AFileName : String); overload; destructor Destroy; override; procedure LoadFRomFile(AFileName : String); procedure SaveToFile(AFileName : String); procedure LoadFromStream(AStream : TStream); procedure SaveToStream(AStream : TStream); end; implementation procedure TModel.Init; var I, J : Integer; begin PrjName := ''; For I := Low(Sources) To High(Sources) Do Sources[i] := 0; For I := Low(Results) To High(Results) Do For J := Low(Results[i]) To High(Results[i]) Do Results[I,J] := 0; Enabled_12_14 := False; end; constructor TModel.Create; begin inherited; Init; end; constructor TModel.Load(AStream : TStream); begin inherited Create; Init; LoadFromStream(AStream); end; constructor TModel.Load(AFileName : String); begin inherited Create; Init; LoadFromFile(AFileName); end; destructor TModel.Destroy; begin inherited; end; procedure TModel.LoadFRomFile(AFileName : String); var AStream : TFileStream; begin AStream := TFileStream.Create(AFileName, fmOpenRead); Try LoadFromStream(AStream); Finally AStream.Free; End; end; procedure TModel.SaveToFile(AFileName : String); var AStream : TFileStream; begin AStream := TFileStream.Create(AFileName, fmCreate); Try SaveToStream(AStream); Finally AStream.Free; End; end; procedure TModel.LoadFromStream(AStream : TStream); var I, J : Integer; begin // Read project name AStream.ReadBuffer(I,SizeOf(Integer)); SetLength(PrjName,I); AStream.ReadBuffer(PrjName[1],I*SizeOf(Char)); // Read source data For I := Low(Sources) To High(Sources) Do AStream.ReadBuffer(Sources[i],SizeOf(Integer)); AStream.ReadBuffer(Enabled_12_14,SizeOf(Boolean)); // Read results For I := Low(Results) To High(Results) Do For J := Low(Results[i]) To High(Results[i]) Do AStream.ReadBuffer(Results[I,J],SizeOf(Integer)); end; procedure TModel.SaveToStream(AStream : TStream); var I, J : Integer; begin // Write project name I := Length(PrjName); AStream.WriteBuffer(I,SizeOf(Integer)); AStream.WriteBuffer(PrjName[1],I*SizeOf(Char)); // Write source data For I := Low(Sources) To High(Sources) Do AStream.WriteBuffer(Sources[i],SizeOf(Integer)); AStream.WriteBuffer(Enabled_12_14,SizeOf(Boolean)); // Write results For I := Low(Results) To High(Results) Do For J := Low(Results[i]) To High(Results[i]) Do AStream.WriteBuffer(Results[I,J],SizeOf(Integer)); end; end. Аот пример использования из программы: Код:
uses Unit2; procedure TForm1.Button1Click(Sender: TObject); var I : Integer; begin With TModel.Create Do begin PrjName := 'Project1'; For I := Low(Sources) To High(Sources) Do Sources[i] := Random(10); SaveToFile('c:\work\projects\prj1.dat'); Free; end; end; procedure TForm1.Button2Click(Sender: TObject); begin With TModel.Load('c:\work\projects\prj1.dat') Do begin ShowMessage(PrjName); Free; end; end; Код работы с компонентами сам напишешь. Последний раз редактировалось lmikle, 29.06.2019 в 19:55. |
#28
|
|||
|
|||
Код:
With TModel.Create Do begin PrjName := 'Project1'; For I := Low(Sources) To High(Sources) Do Sources[i] := Random(10); SaveToFile('c:\work\projects\prj1.dat'); Free; |
#29
|
|||
|
|||
в этом коде создается новый объект для хранения данных, заполняется случайными значениями, потом сохраняется в файл и в конце удаляется.
Построчно: 1. Создание объекта 3-5. Заполняем поля объекта какими-то данными. Тебе тут надо будет вставить заполнение из разных компонентов (Edit, CheckBox, etc) 6. сохранение в файл 7. удаление объекта, он нам больше не нужен. |
#30
|
|||
|
|||
Вот так у меня происходит ввод данных
Код:
procedure TForm1.Edit1Change(Sender: TObject); begin if Edit1.Text<>'' then Dmin:=strtofloat(Edit1.Text); end; procedure TForm1.Edit2Change(Sender: TObject); begin if Edit2.Text<>'' then lnas:=strtofloat(Edit2.Text); end; procedure TForm1.Edit3Change(Sender: TObject); begin if Edit3.Text<>'' then lm:=strtofloat(Edit3.Text); end; procedure TForm1.Edit4Change(Sender: TObject); begin if Edit4.Text<>'' then v0:=strtofloat(Edit4.Text); end; procedure TForm1.Edit5Change(Sender: TObject); begin if Edit5.Text<>'' then p1:=strtofloat(Edit5.Text); end; procedure TForm1.Edit6Change(Sender: TObject); begin if Edit6.Text<>'' then Dv:=strtofloat(Edit6.Text); end; procedure TForm1.Edit8Change(Sender: TObject); begin if Edit8.Text<>'' then ro:=strtofloat(Edit8.Text); end; procedure TForm1.Edit9Change(Sender: TObject); begin if Edit9.Text<>'' then psi1:=strtofloat(Edit9.Text); end; procedure TForm1.Edit10Change(Sender: TObject); begin if Edit10.Text<>'' then vz:=strtofloat(Edit10.Text); end; procedure TForm1.Edit11Change(Sender: TObject); begin if Edit11.Text<>'' then p2:=strtofloat(Edit11.Text); end; procedure TForm1.Edit12Change(Sender: TObject); begin if Edit12.Text<>'' then psi2:=strtofloat(Edit12.Text); end; procedure TForm1.Edit13Change(Sender: TObject); begin if Edit13.Text<>'' then bst:=strtofloat(Edit13.Text); end; procedure TForm1.Edit14Change(Sender: TObject); begin if Edit14.Text<>'' then hst:=strtofloat(Edit14.Text); end; procedure TForm1.Edit15Change(Sender: TObject); begin if Edit15.Text<>'' then bst1:=strtofloat(Edit15.Text); end; procedure TForm1.CheckBox1Click(Sender: TObject); begin if CheckBox1.Checked then begin GroupBox1.Visible:=True; hst:=strtofloat(Edit14.Text); bst1:=strtofloat(Edit15.Text); end else begin GroupBox1.Visible:=False; hst:=0; bst1:=0; end; end; По созданию формы записаны выражения Код:
Dmin:=strtofloat(Edit1.Text); lnas:=strtofloat(Edit2.Text); lm:=strtofloat(Edit3.Text); v0:=strtofloat(Edit4.Text); vz:=strtofloat(Edit10.Text); p1:=strtofloat(Edit5.Text); p2:=strtofloat(Edit11.Text); Dv:=strtofloat(Edit6.Text); ro:=strtofloat(Edit8.Text); psi1:=strtofloat(Edit9.Text); psi2:=strtofloat(Edit12.Text); bst:=strtofloat(Edit13.Text); hst:=strtofloat(Edit14.Text); bst1:=strtofloat(Edit15.Text); GroupBox1.Visible:=False; тут передача данных в цикле Код:
For I := Low(Sources) To High(Sources) Do Sources[i] := Random(10); А мне как передавать исходные данные? Последний раз редактировалось Maks19, 02.07.2019 в 13:59. |