Avatar billede sammy Nybegynder
05. marts 2002 - 09:37 Der er 4 kommentarer og
1 løsning

Multiple Datasources for en Query i Borland C++ 5??

Kan dette lade sig gøre og hvordan?

Sammy
Avatar billede soepro Nybegynder
05. marts 2002 - 10:44 #1
Jeg tolker dit spørgsmål sådan at at du vil have en TQuery component til at plukke data fra to forskellige filer ? Hvis du er blevet inspireret af DataSource property'en, må jeg skuffe dig - den kan kun pege på een TDataSource som peger på en allerede populeret TDataSet.

Men du kan jo sagtens plukke data fra to forskellige databaser i een og samme SQL (brug database BCBDEMOS på TQuery):

select customer.custno, orders.orderno
from customer, orders
where customer.custno = orders.custno
Avatar billede soepro Nybegynder
05. marts 2002 - 10:47 #2
TDataSource property'en på TQuery anvendes udelukkende til at "stjæle" værdierne til sammenfaldende Params property værdier.
Avatar billede sammy Nybegynder
05. marts 2002 - 11:54 #3
Jeg skal filtrere min query med 6 lookupcomboboxe. Disse comboboxe får data fra 6 tabeller som skal linkes til min query (ved hjælp af datasource(s)?), så når jeg vælger en værdi i en af dem skal min query opdateres til kun at vise matchende records. Har fiflet lidt med at tage tekststrengen fra mine comboboxe istedet og smide i query1->params for derefter at bruge dem i mit SQL sætning med en WHERE kommando. Problemet?... det virker ikke! argh! Der er flere point på højkant. Det er til et skoleprojekt jeg skal aflevere mandag... dah! =)
Avatar billede soepro Nybegynder
05. marts 2002 - 14:25 #4
OK, så er det jo netop vha. Params, at du skal løse dit problem - nemlig ved at indsætte såkaldte HOST variabler i dit SQL statement:

select customer.custno, orders.orderno, orders.orderdate
from customer, orders
where customer.custno = orders.custno
and orders.empno >= :EMPNO

i params property'en skal du så sætte EMPNO værdien til den værdi fra din combobox, som brugeren har valgt:

Query1->Params->ParamByName("EMPNO")->AsInteger = ComboBox1->Text->AsInteger;

Tilsvarende skal laves for de 5 andre comboboxe. Du har et andet alternativ, blot for at gøre diskutionen færdig - nemlig at anvende Filter property'en, og sætte Filtered property'en til true:

AnsiString FilterString = "";
if (ComboBox1->Text != "")
{
  if (FilterString != "")
    FilterString += " and ";
  FilterString += "EmpNo = " + ComboBox1->Text;
};
if (ComboBox2->Text != "")
{
  if (FilterString != "")
    FilterString += " and ";
  FilterString += "SaleDate >= " + ComboBox2->Text;
}
: // OSv.
if (FilterString != "")
{
  Query1->Filter = FilterString;
  Query1->Filtered = true;
}
else
{
  Query1->Filter = "";
  Query1->Filtered = false;
}

D.o. metode skal du så bare udføre hver gang brugeren ændrer på en af dine 6 comboboxe.
Avatar billede sammy Nybegynder
05. marts 2002 - 15:14 #5
jeg prøver lige når jeg kommer hjem i aften,, men tak på forhånd! =)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester