Poslední příspěvky

Stran: 1 [2] 3 4 ... 10
11
Ostatní DB / SQLite - výsledky v jednej tabuľke
« Poslední příspěvek od Slavomir kdy 24-01-2022, 07:58:03 »
Ahojte,
prosím o radu, či je možné získať z jedného SQLite dotazu nasledovné výsledky.
Povedzme, že mám dve jednoduché tabuľky v relácii 1:N. Prvá tabuľka (napr. TOVAR), druhá tabuľka (napr. VLASTNOSTI). Logicky z toho vyplýva, že 1 tovar môže mať N vlastností.
Krátky príklad štruktúry polí:
TOVAR: tov_ID, tov_nazov
VLASTNOSTI - vla_ID, vla_nazov

Potrebujem dosiahnuť nasledovný výsledok (pomocou jedného dotazu !):

tov_ID; tov_nazov; (zoznam všetkých priradených vlastností)
1; lampa; (malá | biela | 220V)
2; stolička; (veľká | drevená)
3; televízia; (veľká | LCD | 220V)
4; hračka; (malá | biela)

Toto je len fiktívny príklad, v skutočnosti sú údaje viac logickejšie...  ;D Zátvorky pri vlastnostiach nie sú povinné.
Nemám problém získať údaje pomocou viacerých dotazov, ale vzhľadom na objem dát by som to chcel dosiahnuť iba jedným SQLite dotazom.
Ďakujem za pomoc.
12
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od Stanislav Hruška kdy 23-01-2022, 13:18:58 »
Kód: [Vybrat]
[quote]  Table := TDim2CurrencyArray.Create(
    TArray<Currency>.Create( 0, 3.0, 4.5, 6.0, 9.0, 12.0, 15.0),
    TArray<Currency>.Create(100, 3.9, 5.1, 6.1, 7.6,  8.7,  9.5)
    );
.
  Table := [
    [ 0, 3.0, 4.5, 6.0, 9.0, 12.0, 15.0],
    [100, 3.9, 5.1, 6.1, 7.6,  8.7,  9.5]
    ];
Ostanem pri tom druhom prípade. Lebo
  • nepotrebujem obecnejšie generiká. Získaním hodnoty z tabuľky všetko zahadzujem
  • priradenie hodnôt je omnoho čitateľnejšie a kratšie. Navyše bez Create.
  • zámenu oblých zátvoriek za hranaté urobím v PsPad ľavou zadnou
Prvý krok pre znovu vybudovanie DLL mám (teoreticky) za sebou.[/quote]
13
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od pf1957 kdy 23-01-2022, 13:01:37 »
Snáď by malo ísť aj
Kód: [Vybrat]
TDim2RealArray = array of array of Real
To je rovnocenne tomu zapisu s generiky. Vedle meho predchoziho prikladu, ktery je vhodnejsi pro obecnejsi generika, muzes pouzit inicializaci:
Kód: Delphi [Vybrat]
  1.   AA := [
  2.     [1.1, 1.2, 1.3, 1.4, 1.5],
  3.     [2.1, 2.2, 2.3, 2.4, 2.5]
  4.   ];
  5.  
14
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od Stanislav Hruška kdy 23-01-2022, 11:00:07 »
Snáď by malo ísť aj
Kód: [Vybrat]
TDim2RealArray = array of array of Real
15
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od Stanislav Hruška kdy 23-01-2022, 10:48:25 »
Aj som to skúšal. Ale nevedel som ako to inicializovať. Teraz si porovnám dva posledné príspevky. Ich + a -.
Hneď je svet krajší. Ďakujem.
Edit: tie dáta si tam nastrkám na požiadanie. V prípade potreby. Väčšinou budem potrebovať len pár tabuliek
16
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od pf1957 kdy 23-01-2022, 10:41:45 »
Tak som to mal aj predtým. Akurát som to skladal zo stringov. To čo momentálne mám sa mi vôbec nepáči. Hľadám ďalej.
Kdyz ty tabulky nemusis mit v ROM, tak je klidne muzes mit na heapu. Pak bych pouzil generica, jak jsi sam naznacoval, ale buhvi proc jsi to vzdal:
Kód: Delphi [Vybrat]
  1. TDim2RealArray = TArray<TArray<real>>

Pro kazdou tabulku bych nadefinoval promennou typu TDim2RealArray, kterou bych predaval jako parametr do vypoctu pres argument stejneho typu.

A nekde v inicializaci bych do tech promennych nastrkal data, napr.:
Kód: Delphi [Vybrat]
  1. Initialization
  2.  
  3.   AA := TArray<TArray<real>>.Create(
  4.     TArray<real>.Create(1.1, 1.2, 1.3, 1.4, 1.5 ...),
  5.     TArray<real>.Create(2.1, 2.2, 2.3, 2.4, 2.5 ...)
  6.     ...
  7.   );
  8.  
  9.   AB := TArray<TArray<real>>.Create(
  10.     TArray<real>.Create(11.1, 11.2 ...),
  11.     TArray<real>.Create(21.1, 22.2 ...),
  12.     TArray<real>.Create(31.1, 32.2 ...),
  13.     TArray<real>.Create(41.1, 42.2 ...),
  14.     TArray<real>.Create(51.1, 52.2 ...),
  15.     TArray<real>.Create(61.1, 62.2 ...)
  16.     ...
  17.   );
  18.  

Nebo spravne by to melo byt:
Kód: Delphi [Vybrat]
  1.   AA := TDim2RealArray.Create(
  2.     TArray<real>.Create(1.1, 1.2, 1.3, 1.4, 1.5 ...),
  3.     TArray<real>.Create(2.1, 2.2, 2.3, 2.4, 2.5 ...)
  4.     ...
  5.   );
  6.  
  7.   ...
  8.  


No a pak metoda, ktera s temi poli pracuje, napr.
Kód: Delphi [Vybrat]
  1. function TXxx.GetDim2RealValue(ARealArray: TDim2RealArray; ARowIdx,
  2.   AColIdx: integer): real;
  3. begin
  4.   Result := ARealArray[ARowIdx, AColIdx];
  5. end;
  6.  

= prace s tim je jako s obycejnym polem, jen rozmery pole budes misto Low/High ziskavat pomoci Length

17
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od Stanislav Hruška kdy 23-01-2022, 09:59:20 »
Tak som to mal aj predtým. Akurát som to skladal zo stringov. To čo momentálne mám sa mi vôbec nepáči. Hľadám ďalej. Toto riešenie vyzerá z môjho pohľadu lepšie
Kód: [Vybrat]
type
  TMatrix = array[1..3,1..3] of ;   //  Tu autor neuviedol definíciu
procedure MakeMat(var c: TMatrix; nr, nc: integer; a: array of double);
var
  I, K: integer;
begin
  SetLength(c, nr, nc);
  for I := 0 to nr-1 do
    for K := 0 to nc-1 do
      c[I, K] := a[I * nc + K];
end;
.
MakeMat(ya, 5, 11,
       [1.53,1.38,1.29,1.18,1.06,1.00,1.00,1.06,1.12,1.16,1.18,
        0.57,0.52,0.48,0.44,0.40,0.39,0.39,0.40,0.42,0.43,0.44,
        0.27,0.25,0.23,0.21,0.19,0.18,0.18,0.19,0.20,0.21,0.21,
        0.22,0.20,0.19,0.17,0.15,0.14,0.14,0.15,0.16,0.17,0.17,
        0.20,0.18,0.16,0.15,0.14,0.13,0.13,0.14,0.14,0.15,0.15]);
Teraz sa pokúsim o realizáciu.
Doteraz som neprišiel na spôsob, ako do funkcie priamo narvať const array. Všetky riešenia sú pomocou type Txx = yy. Pre viacrozmerné polia som našiel asi len to čo je tu uvedené.

18
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od pf1957 kdy 23-01-2022, 07:50:21 »
Takže tam budeš mít 127x cykly, které náplní strukturu? No mozne řešení to je
19
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od Stanislav Hruška kdy 22-01-2022, 20:00:21 »
Nakoniec som to urobil takto:
Kód: [Vybrat]
  TData = class
  strict private
    FData: TList<Currency>;
  public
    constructor Create;
    property Data: TList<Currency> read FData write FData;
  end;
.
  TTable = class
  strict private
    FRow: TObjectList<TData>;
  public
    constructor Create;
    destructor Destroy; override;
    property Row: TObjectList<TData> read FRow write FRow;
  end;
...

  if Assigned(Table) then
    Table.Row.Clear
  else
    Table := TTable.Create;
.
  for var I := Low(Asc) to High(Asc) do
  begin
    Table.Row.Add(TData.Create);
.
    for var K := Low(Asc[0]) to High(Asc[0]) do
      Table.Row.Last.Data.Add(Asc[I][K]);
  end;
.
ShowMessage(FloatToStr(Aprox(Table, advedtX.Value, advedtY.Value)));
Tam si môžem dať čo chcem.
20
Obecné / Re:DLL - tabuľky v nej či v DB
« Poslední příspěvek od Stanislav Hruška kdy 22-01-2022, 18:33:53 »
Tak nie. Triedu TArray nemám vytvárať! Pátram ďalej.
Stran: 1 [2] 3 4 ... 10