Zmiana indeksu obiektu sterowana pętlą

Odpowiedz Nowy wątek
2011-03-31 16:17

Rejestracja: 8 lat temu

Ostatnio: 5 lat temu

0

Witam. Szukam rozwiązania, które pozwoliłoby mi na wczytywanie danych z kolejnych obiektów DBLookupComboBox, w zależności od tego ile z nich jest wybranych (jest to sterowane przez radiogroup).

a=RadioGroup3->ItemIndex;
for (i = 0; i = a; i++) {
    DataModule1->Autorzy_Ksiazki->Insert();
    DataModule1->Autorzy_Ksiazki->FieldValues["Id_Autora"]=DBLookupComboBoxi/*Tutaj indeks elementu ma przyjmować wartość i*/->KeyValue; 
    DataModule1->Ksiazki->Last();
    x=DataModule1->Ksiazki->FieldValues["Id"];
    DataModule1->Autorzy_Ksiazki->FieldValues["Id_Ksiazki"]=x;
    DataModule1->Autorzy_Ksiazki->Post();
} 

To jest hmmm... przykładowy kod, który ma zobrazować o co mi chodzi... Ma ktoś może takowe rozwiązanie w zanadrzu?

Pozostało 580 znaków

2011-03-31 16:23
Moderator

Rejestracja: 12 lat temu

Ostatnio: 8 minut temu

0

Utwórz sobie dynamicznie tablicę kontrolek i będzie spoko.


Pozostało 580 znaków

2011-03-31 17:19

Rejestracja: 13 lat temu

Ostatnio: 4 lata temu

0

Czegoś takiego szukasz ? Znaczy - szukania komponentu "po nazwie" którą w locie robisz ?

int x,y,z;

// ... 

TLabel* label = dynamic_cast<TLabel*>( FindComponent( AnsiString().sprintf("PointLabel_%d_%d_%d", x,y,z) ) );
if(label) {
   // ...
   }
edytowany 1x, ostatnio: Ranides, 2011-03-31 17:20

Pozostało 580 znaków

2011-03-31 22:00

Rejestracja: 8 lat temu

Ostatnio: 5 lat temu

0

To raczej będzie rozwiązanie zasugerowane przez winerfresh'a... Tylko jak na razie nie mogę do końca ogarnąć o co mu chodzi ;-) a może lepiej powiedzieć - jak to wykonać... Bo w necie przykładów jest troszkę, ale większość do VBA...

edytowany 1x, ostatnio: vekh, 2011-03-31 22:01

Pozostało 580 znaków

2011-04-01 20:47

Rejestracja: 13 lat temu

Ostatnio: 4 lata temu

0

Nie możesz ogarnąć o co chodzi, ale czujesz, że "to jest to". Jak nawet nie wiesz "co to jest" ? :| Nieeee - w taki sposób donikąd nie zajedziesz... Ten fragment o VBA też najlepiej zdaje się pokazywać, że coś nie halo się orientujesz sam czego chcesz, bo ... WTF - czego Ty szukasz, że w zapytaniu o obsługę VCLa wyskakuje Ci Visual Basic?! Przecież VCL nawet na ten język przeniesiony nie jest...

W przykładowym kodzie należało rozumiem to legendarne DBLookupComboBoxi zastąpić. No to masz, zwykłe "kopiuj wklej" niemalże Cię czeka. Masz nawet przykład x razy trudniejszy uklepany ...

Jeśli kontrolki na formę powstawiałeś, a teraz chcesz w nich grzebać... to dynamiczne tworzenie "czegokolwiek" jest absurdem.

Pozostało 580 znaków

2011-04-01 21:17

Rejestracja: 8 lat temu

Ostatnio: 5 lat temu

0
Ranides napisał(a)

Nie możesz ogarnąć o co chodzi, ale czujesz, że "to jest to". Jak nawet nie wiesz "co to jest" ? :| Nieeee - w taki sposób donikąd nie zajedziesz... Ten fragment o VBA też najlepiej zdaje się pokazywać, że coś nie halo się orientujesz sam czego chcesz, bo ... WTF - czego Ty szukasz, że w zapytaniu o obsługę VCLa wyskakuje Ci Visual Basic?! Przecież VCL nawet na ten język przeniesiony nie jest...
Google = np. tablica kontrolek - same przykłady z VB. Dlatego napisałem, że nie wiem o co z tym chodziło... Bo pierwsze co mi się skojarzyło to tablica "DBLookupów" z chodzącym indeksem :-)

Ranides napisał(a)

W przykładowym kodzie należało rozumiem to legendarne DBLookupComboBoxi zastąpić. No to masz, zwykłe "kopiuj wklej" niemalże Cię czeka. Masz nawet przykład x razy trudniejszy uklepany ...
Tego kopiuj wklej właśnie chciałem uniknąć... Owszem mogę tak zrobić, ale wychodzi coś takiego:

switch (RadioGroup3->ItemIndex) {
case 0:
DataModule1->Autorzy_Ksiazki->Insert();
DataModule1->Autorzy_Ksiazki->FieldValues["Id_Autora"]=DBLookupComboBox2->KeyValue;   
DataModule1->Ksiazki->Last();                                                       
x=DataModule1->Ksiazki->FieldValues["Id"];                                            
DataModule1->Autorzy_Ksiazki->FieldValues["Id_Ksiazki"]=x;
DataModule1->Autorzy_Ksiazki->Post();
break;
case 1:
DBLookupComboBox2->Enabled=True;
DBLookupComboBox3->Enabled=True;
DBLookupComboBox4->Enabled=False;
DBLookupComboBox5->Enabled=False;
DataModule1->Autorzy_Ksiazki->Insert();
DataModule1->Autorzy_Ksiazki->FieldValues["Id_Autora"]=DBLookupComboBox2->KeyValue;
DataModule1->Ksiazki->Last();
x=DataModule1->Ksiazki->FieldValues["Id"];
DataModule1->Autorzy_Ksiazki->FieldValues["Id_Ksiazki"]=x;
DataModule1->Autorzy_Ksiazki->Next();
DataModule1->Autorzy_Ksiazki->Refresh();
DataModule1->Autorzy_Ksiazki->Insert();
DataModule1->Autorzy_Ksiazki->FieldValues["Id_Autora"]=DBLookupComboBox3->KeyValue;
DataModule1->Autorzy_Ksiazki->FieldValues["Id_Ksiazki"]=x;
DataModule1->Autorzy_Ksiazki->Post();
break;
case 2:
DataModule1->Autorzy_Ksiazki->Insert();
DataModule1->Autorzy_Ksiazki->FieldValues["Id_Autora"]=DBLookupComboBox2->KeyValue;
DataModule1->Ksiazki->Last();
x=DataModule1->Ksiazki->FieldValues["Id"];
DataModule1->Autorzy_Ksiazki->FieldValues["Id_Ksiazki"]=x;
DataModule1->Autorzy_Ksiazki->Next();
DataModule1->Autorzy_Ksiazki->Insert();
DataModule1->Autorzy_Ksiazki->FieldValues["Id_Autora"]=DBLookupComboBox3->KeyValue;
DataModule1->Autorzy_Ksiazki->FieldValues["Id_Ksiazki"]=x;
DataModule1->Autorzy_Ksiazki->Next();
DataModule1->Autorzy_Ksiazki->Insert();
DataModule1->Autorzy_Ksiazki->FieldValues["Id_Autora"]=DBLookupComboBox4->KeyValue;
DataModule1->Autorzy_Ksiazki->FieldValues["Id_Ksiazki"]=x;
DataModule1->Autorzy_Ksiazki->Post();
break;
case 3:
DataModule1->Autorzy_Ksiazki->Insert();
DataModule1->Autorzy_Ksiazki->FieldValues["Id_Autora"]=DBLookupComboBox2->KeyValue;
DataModule1->Ksiazki->Last();
x=DataModule1->Ksiazki->FieldValues["Id"];
DataModule1->Autorzy_Ksiazki->FieldValues["Id_Ksiazki"]=x;
DataModule1->Autorzy_Ksiazki->Next();
DataModule1->Autorzy_Ksiazki->Insert();
DataModule1->Autorzy_Ksiazki->FieldValues["Id_Autora"]=DBLookupComboBox3->KeyValue;
DataModule1->Autorzy_Ksiazki->FieldValues["Id_Ksiazki"]=x;
DataModule1->Autorzy_Ksiazki->Next();
DataModule1->Autorzy_Ksiazki->Insert();
DataModule1->Autorzy_Ksiazki->FieldValues["Id_Autora"]=DBLookupComboBox4->KeyValue;
DataModule1->Autorzy_Ksiazki->FieldValues["Id_Ksiazki"]=x;
DataModule1->Autorzy_Ksiazki->Next();
DataModule1->Autorzy_Ksiazki->Insert();
DataModule1->Autorzy_Ksiazki->FieldValues["Id_Autora"]=DBLookupComboBox5->KeyValue;
DataModule1->Autorzy_Ksiazki->FieldValues["Id_Ksiazki"]=x;
DataModule1->Autorzy_Ksiazki->Post();
break; 

Nie śmiać się - to tylko kod na pokaz! ;-) Wszystko fajnie działa, ale chyba nie o to w programowaniu chodzi... Chociaż może tak? Nie wiem - uczę się... Miałem nadzieję, że istnieje sposób żeby można było uszczuplić ten kod bo po prawdzie to ta sama operacja wykonywana z różnymi danymi z różnych combo... Wszelkie pytania uprzedzam - muszą być cztery comba i to cztery różne...

Ranides napisał(a)

Jeśli kontrolki na formę powstawiałeś, a teraz chcesz w nich grzebać... to dynamiczne tworzenie "czegokolwiek" jest absurdem.
A i owszem... Ale od samego początku to nie ja się przy takim rozwiązaniu upierałem... Leniem nie jestem bo "nieco" czasu spędziłem na poszukiwaniach (masz rację, że nie wiem czego szukam) głupotą braku wiedzy nazwać nie można, więc nie denerwuj się ;-) Chciałem po prostu dowiedzieć się jak takie coś rozwiązałby doświadczony programista...

edytowany 1x, ostatnio: vekh, 2011-04-01 21:19

Pozostało 580 znaków

2011-04-01 23:09

Rejestracja: 13 lat temu

Ostatnio: 4 lata temu

0

Ale ja nie o taki "kopiuj wklej", ja mówię o kopiuj wklej z mojego posta. Tam naprawdę siedzi to, czego Ci do szczęścia trzeba, no nie wiem jak to pokazać...

TDBLookupCombo* FindCombo(TForm* where, int index) {
    return dynamic_cast<TDBLookupCombo*>(where->FindComponent("DBLookupComboBox" + IntToStr(index) ) );
    }

// ...
for(int i=0; i<32; i++) {
    Memo1->Lines->Add( FindCombo(this, i)->KeyValue );
    }

A tekst o głupocie to stopka... muszę wywalić, bo co chwilę ktoś bierze do siebie, nie widząc, że to stopka jest ;)

Pozostało 580 znaków

2011-04-26 14:23

Rejestracja: 8 lat temu

Ostatnio: 5 lat temu

0

Dobra problem rozwiązałem tak - zadeklarowałem tablicę elementów TDBLookupComboBox

TDBLookupComboBox *autor[4]; 

A następnie pobierając odpowiednio powiększoną wartość z RadioGroup jadę pętlą:


zm=RadioGroup3->ItemIndex + 1;

for (i=2; i<zm; i++)
{
    pom=i;
    DataModule1->Autorzy_Ksiazki->Insert();
    DataModule1->Autorzy_Ksiazki->FieldValues["Id_Autora"]=autor[pom]->KeyValue;   //illegal use of floating point
    DataModule1->Ksiazki->Last();
    x=DataModule1->Ksiazki->FieldValues["Id"];
    DataModule1->Autorzy_Ksiazki->FieldValues["Id_Ksiazki"]=x;
    DataModule1->Autorzy_Ksiazki->Post();
}

Miałem błąd kiedy wykorzystywałem i. I tyle.

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0