Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > C++ Builder 6 Access


Автор: Tamina 27.9.2010, 18:05
 Привет всем!!!
В программировании я не очень!

У меня проблема!
Из базы данных берётся таблица Б. Из таблицы Б берутся 2 поля(столбика)- Б1 и Б2.
Затем из той же базы данных берётся таблица С. Из таблицы С берётся поле(столбик) С1.

Нужно вытащить значения(цифры) из таблиц Б1 и Б2. Произвести расчёт(типа Б1-Б2) и занести их в С1.

Вот то что я сделала.

 
   
Код

ADOQuery3->Close();
   ADOQuery3->SQL->Clear();
   ADOQuery3->SQL->Add("INSERT INTO С (С1) VALUES (select Б1-  Б2 from Б) ");
   ADOQuery3->ExecSQL();

 

но!!!

INSERT не может сработать т.к в нём 2 обращения к разным таблицам.

Вот что я придумала !!!
Нужно создать массив 2х мерный - a[100,2].
a[100,0]- массив чисел из таблицы Б поля Б1,
a[100,1]- массив чисел из таблицы Б поля Б2,
a[100,2]- массив чисел из таблицы С поля С1- результат.

Тут проблема 1.
Как запихнуть числа в этот массив?

Затем выполняется в цикле расчёт типа:

Код

for(int i=0;i<=99;i++){
a[i,2]=a[i,0]-a[i,1]; 
}

В вот этой записи не уверена a[i,2]=a[i,0]-a[i,1]; не знаю можно ли так писать?

А затем выполняю код:

Код

ADOQuery3->Close();
   ADOQuery3->SQL->Clear();
   ADOQuery3->SQL->Add("INSERT INTO С (С1) VALUES (a[i,2]) ");
   ADOQuery3->ExecSQL();

 

Помогите решить проблему!
Заранее спасибо!!! 

Автор: Данкинг 27.9.2010, 19:10
Цитата(Tamina @  27.9.2010,  19:05 Найти цитируемый пост)
Как запихнуть числа в этот массив?

Не особо понял, что требуется, но в общем случае, взять значение поля, в общем случае: 
Код

p=AdoTable->FieldValues['POLE']

Цитата(Tamina @  27.9.2010,  19:05 Найти цитируемый пост)
В вот этой записи не уверена a[i,2]=a[i,0]-a[i,1]; не знаю можно ли так писать?

В каком смысле "можно"? Код работает или нет?

Автор: Tamina 27.9.2010, 19:24
Цитата

    
p=AdoTable->FieldValues['POLE']



Этот код подставит в P числа, которые хранятся в 'POLE'?

Цитата

В вот этой записи не уверена a[i,2]=a[i,0]-a[i,1]; не знаю можно ли так писать?

В каком смысле "можно"? Код работает или нет?



Не пробовала т.к. a[i,2]=a[i,0]-a[i,1] должны быть числа из базы данных. 
А я именно это не знаю как делать!!!

Автор: Данкинг 27.9.2010, 21:16
Цитата(Tamina @  27.9.2010,  20:24 Найти цитируемый пост)
Этот код подставит в P числа, которые хранятся в 'POLE'?

Да, значения данного поля возьмёт.

Автор: Tamina 27.9.2010, 22:04
Цитата

p=AdoTable->FieldValues['POLE']


В таком варианте не работает!
Вот нашла такой 
Код

double z [20][2];
z [20][0]=ADOQuery1->FieldByName("Б1");

выдаёт ошибку на 
Код

z [20][0]=ADOQuery1->FieldByName("Б1");



Цитата

Illegal use of floating point

Автор: Данкинг 27.9.2010, 22:20
Ну да, 
Код

ADOQuery1->FieldByName("Б1")->AsFloat;

Автор: Tamina 28.9.2010, 19:32
Вот что я на программировала:
Код

float p[33][2];
int z;
while(z<=32){
p[z][0]=AdoQuery1->FieldByName(B)->AsFloat;
p[z][1]=AdoQuery2->FieldByName(C)->AsFloat;
z++;
}
 
for(z=0;z<=32;z++){
p[z][2]=p[z][0]-p[z][1];
   ADOQuery3->Close();
   ADOQuery3->SQL->Clear();
   ADOQuery3->SQL->Add("INSERT INTO С (С1) VALUES (p[i][2]) ");
   ADOQuery3->ExecSQL();
 
}


Ошибка в синтаксисе(пропущен оператор ) в выражении запроса "p[i][2]" 

Автор: Данкинг 28.9.2010, 19:47
Вероятно, как-то так:
Код

ADOQuery3->SQL->Add("INSERT INTO С (С1) VALUES ("+IntToStr(p[i][2])+")");

Автор: Tamina 28.9.2010, 20:53
Так тоже пробовала

Ошибка "Не совпадает число запросов и число результирующих полей"
Пробовала в INSERT INTO С (С1) писать все поля -ошибка! 

Автор: Данкинг 28.9.2010, 21:16
А откуда вообще взялась переменная i, если в коде - z ?

Автор: Tamina 28.9.2010, 21:32
Вместо i везде  z!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)