Форум: "Базы";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];
ВнизЧайницкий вопрос про добавление данных Найти похожие ветки
← →
Kreyl (2005-07-01 13:08) [0]Задача выглядит так. Есть база данных. В ней таблица с рядами чисел a и b. Нужно создать таблицу со столбцом с, куда будет вноситься результат математической операции над а и и (ну, например, с=а+b).
Дело в том, что в книжках все примеры предполагают ввод данных в таблицу руками пользователя, через связанные с таблицей компоненты. А нужно по нажатию кнопки считать данные, выполнить вычисления, создать таблицу и внести в нее результаты. И потом сказать пользователю "ага" :-) То есть, выводить данные на форму не надо.
У меня возник затык с добавлением в существующую таблицу строк с полями с нужными значениями.
Я занес числа в Access 2003, зарегистрировал базу данных через ODBC. Версия DELPHI - 8.
← →
Digitman © (2005-07-01 13:14) [1]
> У меня возник затык
ну, рассказывай ..
← →
Dell3r © (2005-07-01 13:27) [2]>А нужно по нажатию кнопки считать данные, выполнить вычисления,
На сколько я понимаю из сущесвующей таблицы
>создать таблицу и внести в нее результаты.
Зачем создавать дополнительную таблицу?
Берешь DBEdit1, DBEdit2, и DBEdit3
К первому привязываешь первый столбец ко второму второй к третьему третий
Потом
IntToStr(DBEdit3.Text):=StrToInt(DBEdit1.Text)+StrToInt(DBEdit2.Text);
Потом сохраняешь таблицу и ВСЁ.
← →
Kreyl (2005-07-01 13:44) [3]2 Dell3r:
>А нужно по нажатию кнопки считать данные, выполнить вычисления,
На сколько я понимаю из сущесвующей таблицы
Да, совершенно верно.
>создать таблицу и внести в нее результаты.
Зачем создавать дополнительную таблицу?
Чтобы потом по ней искать.
Я поначалу создал ее в аксессе руками.
IntToStr(DBEdit3.Text):=StrToInt(DBEdit1.Text)+StrToInt(DBEdit2.Text);
Потом сохраняешь таблицу и ВСЁ.
Это приведет к образованию в DBEdit3 сразу всего столбца с результатами? То есть, перебирать исходную таблицу по строкам нет необходимости?
Если так, то как реализовать операцию c[i]=a[i]+a[i+1]?
Спасибо!
← →
Sergey13 © (2005-07-01 13:49) [4]2 [3] Kreyl (01.07.05 13:44)
ДБЕдиты тут нафиг не нужны (это когда руками долбишь надо). А вот про циклы тебе почитать нужно.
← →
Kreyl (2005-07-01 14:05) [5]2 Digitman:
private
MatrixBase : BindingManagerBase;
deltaBase : BindingManagerBase;
t0 : integer;
delta0 : currency;
...
procedure TWinForm.Button3_Click(sender: System.Object; e: System.EventArgs);
var
n, i : integer;
Ynow, Ybefore : Double;
deltanow : currency;
begin
// clear table
n:=deltaBase.Count;
StatusBa.Panels[0].Text := n.ToString;
if n>0 then
for i:=1 to n do
begin
deltaBase.RemoveAt(0);
Adapterd.Update(DataSet1, "spread_deltaI");
end;
StatusBa.Panels[0].Text := "aga";
// convert to deltas
n:=deltaBase.count;
ProgressBar1.Maximum := n;
for i:=1 to n do
begin
// Add new Row
deltaBase.AddNew;
try
Adapterd.Update(DataSet1, "spread_deltaI");
except
on e : exception do
MessageBox.Show(e.Message);
end;
//Calculate delta
Ynow := Convert.ToDouble(DataSet1.Tables[0].Rows[i].Item[1]);
Ybefore := Convert.ToDouble(DataSet1.Tables[0].Rows[i-1].Item[1]);
deltanow:= Ynow+Ybefore;
// Edit added row
n:=deltaBase.Count-1;
deltaBase.Position := n;
DataSet1.Tables[1].Rows[i-1].BeginEdit;
DataSet1.Tables[1].Rows[i-1].Item[0]:=deltanow;
DataSet1.Tables[1].Rows[i-1].EndEdit;
try
Adapterd.Update(DataSet1, "spread_deltaI");
except
on e : exception do
MessageBox.Show(e.Message);
end;
ProgressBar1.Increment(1);
end;
end;
Меня не оставляет уверенность, что я всё делаю через задницу. Увы мне.
← →
Sergey13 © (2005-07-01 14:17) [6]2[5] Kreyl (01.07.05 14:05)
Вот так примерно не проще?Table1.First;
while not table1.eof do
begin
table2.Append;
Table2.FieldByName("C").asFloat:=Table1.FieldByName("A").asFloat+Table1.FieldByName("B").asFloat;
Table2.Post;
table1.next;
end;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.039 c