Poslední příspěvky

Stran: [1] 2 3 ... 10
1
MySQL / Re:dotaz nad mé síly
« Poslední příspěvek od Jirka kdy Dnes v 08:19:30 »
původní dotaz byl, jestli je lepší při daném počtu sql dotazů (neměnných) lepší využít co sql dotaz to vlastní MyQuery komponenta, nebo sql dotazy dynamicky přiřazovat jedné MyQuery komponentě.

Pokud je výstup fixní tj. není požadavek na různé druhy výstupu preferoval bych mít jednu MyQuery komponentu na DataModulu  + volací proceduru  která bude mít vstupní parametr
typu record   například
Kód: [Vybrat]
  rSQL_String  = packed record
  SQL_1:String ;
  SQL_WHERE:String;
  SQL_ORDER:String;

  end;

a pak to volat z požadovaných míst ..

2
MySQL / Re:dotaz nad mé síly
« Poslední příspěvek od Stanislav Hruška kdy 13-06-2024, 17:17:00 »
Ak Ti vyhovuje súčasný stav, tak sa niet o čom baviť. Mimochodom, 50 dopytov nie je veľa.
Ja mnohé SQL texty vytváram dynamicky. Podľa volieb užívateľa. To je zásadný rozdiel oproti Tvojim statickým textom.
3
MySQL / Re:dotaz nad mé síly
« Poslední příspěvek od Vladimir64 kdy 13-06-2024, 15:58:14 »
původní dotaz byl, jestli je lepší při daném počtu sql dotazů (neměnných) lepší využít co sql dotaz to vlastní MyQuery komponenta, nebo sql dotazy dynamicky přiřazovat jedné MyQuery komponentě. Ty jsi to rozšířil i na dynamické vytváření a ničení MyQuery. Myslím si, že se tím vzdáváš části výhod, které přináší objektově orientované programování. Dynamické vytváření a ničení MyQuery, znamená také opakovaně iniciovat parametry. Mluvíme o specifické aplikaci, která má neměnné sql dotazy (i když jich bude tak do padesáti), mění se jen parametry dotazu. Některé argumenty vztahující se k paměti a rychlosti mají čím dál menší význam a u aplikací tohoto typu zanedbatelný. Využitím předdefinovaných komponent přenechávám část programátorské práce především vztahující se k životnímu cyklu komponenty a správě paměti dané komponentě. Ještě bych zmínil jednu pro mě velice důležitou vlastnost mého přístupu. Sql dotazy si nepamatuji, natož 50 sql dotazů. V aplikaci mám nastavené dva režimy. V prvním režimu se provádí vyvolaný sql dotaz. V druhém režimu se dotaz neprovádí ale zobrazí.
Memo2.Lines.Text := QueryForm.MyQueryTkalcovna.SQL.Text;
Pokud si teda chci sql dotaz prohlídnout, zkontrolovat, oživit, abych si ujasnil, co výpočet vyjadřuje, nemusím se "hrabat" ve zdrojovém kódu.
Myslím si, že můj přístup je jasnější, kód čitelnější, méně náchylný chybám. Všechny MyQuery mám na jednom formuláři (Delphi při jeho zničení automaticky uvolní paměť pro všechny MyQuery). Mám je jasně pojmenované (na nevizuálním formuláři dokonce i roztříděné do skupin), všechny sql dotazy mám na jednom místě, použitelné v jakékoliv části programu, u každé komponenty MyQuery mám jasně uvedené parametry, které dotaz požaduje. Protože některé parametry jsou společné pro více dotazů (například od.. do jsou společné parametry pro všechny dotazy) můžu je inicializovat jen jednou.
Tak to jsou zase pro mě silné argumenty pro využití více MyQuery.
4
MySQL / Re:dotaz nad mé síly
« Poslední příspěvek od Stanislav Hruška kdy 12-06-2024, 20:45:18 »

Na tomto fóre mi odporúčali, že čo sa dá vytvoriť dynamicky, tak to tak treba urobiť. Držím sa ich odporúčaní a všade som to tak urobil. Ale to nie je dôvod, prečo teraz píšem.


Podľa odporúčaní MS aj tu na fóre, treba použivať predvolené adresáre OS. Pre údaje to je /Data... a pre aplikácie /Program Files..., /Program Files (x86)... alebo /Users/UserName...Problém je v tom, že adresáre si môže voliť užívateľ (aspoň by to tak malo byť) a menia sa podľa druhu OS!!! Ak máš údaje pokope s aplikáciou, tak užívateľ si to môže dať na iný disk než C:. To je môj prípad.
Z toho vyplýva, že ich treba zistiť dynamicky pri spustení programu a nastaviť ich pre všetky TQuery, TTable. Iné datasety nepoužívam. Ja som nenašiel spôsob, ako dynamicky načitať TQuery či TTable.
Druhý problém je, že ak zmeníš SQL text, tak musíš zktualizovať zoznam polí.


Pri dynamickej tvorbe TQuery toto všetko odpadá. Osobne mám vytvorené tri funkcie:
NewQuery(Name: string; Transaction: TFDTransaction ... alebo iný typ);
OpenQuery(Transaction: TFDTransaction); Ak spúšťam Query prvý krát, tak použijem Open. Ak zmením hodnotu čo len jedného parametra alebo to spúšťam opakovane, tak použijem Refresh.
ExecQuery(Transaction: TFDTransaction);


Používam jediné TConnection, takže ho daným funkciám neposielam.


Toto sú u/pre mňa veľmi silné dôvody na dynamické vytváranie TQuery. Samozrejme existujú výnimky. Používam TMS komponenty a tam to je napríklad TDBLooukupComboBox (presný názov si nepamätám).


Som zvedavý na Tvoj postoj k takému pohľadu na problematiku.
5
Obecné / Re:Přidání listu do sešitu v Excelu
« Poslední příspěvek od PetrB0 kdy 12-06-2024, 11:36:10 »
Díky za konzultace, na konec jsem to tedy udělal dvoufázové, protože lepší postup jsem nenašel. Otevření sešitu->přidání listu->uložení sešitu do temp adresáře->zavření sešitu->otevření sešitu z temp adresáře->nastavení VBA kódu pro list->uložení sešitu do originální lokace->zavření sešitu.
6
Obecné / Re:Přidání listu do sešitu v Excelu
« Poslední příspěvek od PetrB0 kdy 11-06-2024, 12:48:19 »
Tohle jsem při svých pátráních už také zkoušel, ale nefungovalo to. Tedy nepřineslo to žádnou změnu v seznamu VBComponents.
Pro jistotu jsem to teď znovu vyzkoušel na současném kódu a před přidáním listu i po jeho přidání to stále hlásí stejný počet komponent. Seznam je totožný v obou případech. A když potom aplikaci pustím znovu, mám na konci seznamu nový komponent typu Document (tak jak bych očekával už po přidání listu).
Zkusil jsem i Workbook.RefreshAll. Také nic
7
Obecné / Re:Přidání listu do sešitu v Excelu
« Poslední příspěvek od pf1957 kdy 11-06-2024, 11:55:04 »
A dokud sešit nezavřu, tak v seznamu VBComponents modul pro list nevidím. (Na rozdíl od již ukázaného programu ve VBA, kde to vidím okamžitě). A to ani když mezitím přidávám jiné typy modulů.
Jakmile sešit znovu otevřu, tak si mohu v seznamu Listů najít ten můj a v VBComponents si mohu sáhnout na jeho VBA modul a případně mu nastavit kód.
Sice uz roky neprogramuju a nemam ani Delphi, ale kdyz se divam do nejakeho kodu, tak vsude volame metodu WorkSheet.Activate, nez s tim sheetem neco delame a to i v pripade, ze je Excel neviditelny. Proc, to si skutecne nepamatuju, ale treba to pomuze.
8
Obecné / Re:Taká zvláštna prosba
« Poslední příspěvek od Stanislav Hruška kdy 11-06-2024, 09:59:03 »
Ja si veľmi cením, že si to tu dal. Zavďačiť si sa mi zavďačil tým odkazom. Len tu sú "objektívne" dôvody. Možno pri niektorom nemám pravdu.
  • učenie mi ide pomaly
  • ešte pomalšie mi ide samotná robota
  • môj vedomostný  strop je veľmi nízky. Napríklad pri matematike som skončil pri integráloch. Tie už boli nad moje sily
  • veľkým problémom u mňa je, že nemám "encyklopedickú" pamäť. Aj preto neviem žiaden cudzí jazyk. To som sa o to veľmi snažil :'(
  • vek už mám trochu vyšší (74). Aj keď si to nechcem priznať, tak sa to prejavuje
Takže ďakujem, ale nemám tu odvahu im napísať. Snažím sa správať férovo a nechcem nikomu spôsobiť problémy.
9
Obecné / Re:Přidání listu do sešitu v Excelu
« Poslední příspěvek od PetrB0 kdy 11-06-2024, 09:49:06 »
Ahoj, díky za reakci, ale tohle je něco trošinku jiného. Tahle část mi funguje.
Sešit v Excelu má několik částí:List, Formulář, Modul, Třídu.
K tomu List a Formulář mají ještě vlastní modul.
Sešit si získám třeba otevřením již existujícího souboru
Kód: [Vybrat]
pWorkBook:=TExcelApplication.Workbooks.Open(JmenoSouboru,Null,True,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,0);
A můžu si z něj zobrazit seznam všech jeho listů
Kód: [Vybrat]
For __I:=1 To pWorkBook.Worksheets.Count Do
   Begin
    __V:=pWorkBook.Worksheets.Item[__I];
   End;
Zároveň mohu získat seznam VBComponentů (tam jsou všechny VBA Objekty, tedy Modul, Třída, ale i Modul Formuláře a Modul Listu)
Kód: [Vybrat]
pProject:=pWorkBook.VBProject;
 For __I:=1 To pProject.VBComponents.Count Do
  Case  Project.VBComponents.Item(__I).type_ Of
   vbext_ct_StdModule         : S:='tvmtModule';  //Klasický vba modul
   vbext_ct_ClassModule       : S:='tvmtClassModule'; //Modul s objektem
   vbext_ct_MSForm             : S:='tvmtForm'; //VBA modul s kódem pro formulář
   vbext_ct_ActiveXDesigner : S:='tvmtOther'; //? tohle přesně nevím, ale nepotřebuji to
   vbext_ct_Document          : S:='tvmtDocument'; //VBA modul s kódem pro List
  Else  S:='tvmtUnknown';
  End;
A s VBA kódem v každém komponentu mohu manipulovat přes
Kód: [Vybrat]
pProject.VBComponents.Item(I).CodeModule...; //AddFromString,DeleteLines,...

Do seznamu VBComponents přidávám pomocí
Kód: [Vybrat]
pTyp:=vbext_ct_StdModule nebo vbext_ct_ClassModule nebo vbext_ct_MSForm;
  //   vbext_ct_ActiveXDesigner - to jsem nezkoušel to nepotřebuji
  // vbext_ct_Document          - to jsem zkoušel, ale vyvolá to OLE Error
 pProject.VBComponents.Add(pTyp);

Takže kromě vbext_ct_Document mohu ty tři v pohodě přidat a vložit jim VBA kód.
Document musím přidat nejprve jako list
Kód: [Vybrat]
Sheet:=pWorkBook.Worksheets.Add(Null,p.WorkBook.Worksheets[pWorkBook.Worksheets.Count],1,xlWorksheet,0); //Tohle přidá sešit na konec
 Sheet.Name:='JménoMéhoListu';

A dokud sešit nezavřu, tak v seznamu VBComponents modul pro list nevidím. (Na rozdíl od již ukázaného programu ve VBA, kde to vidím okamžitě). A to ani když mezitím přidávám jiné typy modulů.
Jakmile sešit znovu otevřu, tak si mohu v seznamu Listů najít ten můj a v VBComponents si mohu sáhnout na jeho VBA modul a případně mu nastavit kód.

Řešení ve stylu "Otevři soubor - Přidej list - Zavři soubor - Otevři soubor - Nastav listu VBA" bude fungovat, ale přijde mi to dost kostrbaté, když potřebuji vložit několik listů s VBA.
Nemáte někdo typ, co bych mohl dělat špatně? Možná nějaký blbě použitý parametr, mnou neobjevená funkce pro VBComponents update nebo něco podobného...

Díky
10
Obecné / Re:Přidání listu do sešitu v Excelu
« Poslední příspěvek od vandrovnik kdy 11-06-2024, 09:01:20 »
Já našel v nějakém stařičkém kousku aplikace tohle:

Kód: [Vybrat]
var fModule: variant;
...
// novy modul
fModule:=fVBProject.VBComponents.Add(vbext_ct_StdModule);
fModule.Name:='NejakyNazev';
// zapiseme do nej makro na nahravani obrazku
Makro:='Sub NahrajFoto(Formular As String, Soubor As String)'+#13+
......
'End Sub';
fModule.CodeModule.AddFromString(Makro);
Stran: [1] 2 3 ... 10