Populația dbgrid

Populând dbGrid

Te rog ajută. Există dbGrid + MySQL. Există un proiect apis, în care rezultatele interogării trebuie trimise la rețea. Dar umple grilă nu funcționează.
Tabelul și interogarea nu sunt potrivite - în funcție de rezultatele solicitării, grilă este fie vizibilă, fie lipsă, care prin componentele specificate nu poate fi realizată. Stringrid este, de asemenea, neplăcut, dar a fost luat în considerare.
Ajutor.

> grila de interogare este vizibilă sau lipsește

DBGrid.Visible: = Table.Active și (Table.RecordCount> 0)

Pentru o vizibilitate mulțumesc, dar încă mai este de dorit să umplere manuală dbGrid „bine. Și chiar mai bine de a conduce o pană între ligamentul și TAdoQuery TDataSource (trebuie să verifice anumite setări și date, eventual, resortirovat în formatul de ieșire dorit)

Completarea manuală a DBGrid înseamnă că se utilizează StringGrid, în ciclu există o alergare pentru toate înregistrările și pentru fiecare înregistrare kilometrajul este peste toate câmpurile. O vrei?

Formatul de ieșire al câmpurilor poate fi specificat fie în Field.OnGetText, fie în DBGrid.OnDrawColumnCell

Păstrați un set de date tampon în memorie (de exemplu, TClientDataSet, sau ceva de genul kbmMemTable, RxMemoryData.) Umple-l cu mâna și arată ceea ce doriți într-un e-DBGrid

Și ce anume pot completa în acest set de date intermediare?
Toate celelalte opțiuni și arici sunt de înțeles.
Despre resortirovki - nu este întotdeauna posibil de a crea un astfel de Select, care corespunde pe deplin formatul în grila de ieșire (utilizată MySQL 3.23), astfel încât este necesar să se reorganiza date, de exemplu, liniile de ridicare în coloane. Și direct format (în sensul datelor din celule) nu este necesar să se schimbe încă (acest lucru este ușor de făcut cu umplere manuală). În plus, este de dorit disponibilitatea completă a rețelei (adică funcționalitatea obișnuită, ca înainte de schimbare).
Și așa cum am spus deja, umplerea manuală a StringGrid este deja o etapă trecută (și, prin urmare, anihilată)

Uitați de bazele de date.

> Și ce anume este posibil să completați aceste date intermediare?

Dacă este descendent al TDataSet - atunci tot ceea ce poate face TDataSet

> Despre resortirovki - nu întotdeauna posibil să se creeze un Select, care corespunde pe deplin formatul de ieșire din grila (folosind MySQL 3.23), astfel încât este necesar să se reorganizeze datele, de exemplu, pentru a ridica rândurile în coloane.

Puteți crea câmpurile necesare în timp de execuție, apoi completați. Și sortarea de la TClientDataSet și RxMemoryData este

> este de dorit performanța completă a rețelei (adică funcționalitatea obișnuită a acesteia, ca înainte de schimbare).

Și unde va merge :) Sau doriți să editați datele din setul de date tampon și să efectuați modificări în baza de date? Și se poate face - da, cel puțin în manipulatorul AfterPost


>> Și ce anume este posibil să completați aceste date intermediare?
>
> Dacă este un descendent al TDataSet - atunci toate cele pe care le poate gestiona
> TDataSet

O echipă poate să-mi spună cineva? Am câteva săptămâni am pariu - proiect scris în Delphi și MySQL API, toate conexiunile sunt realizate prin mysql_connect fără ajutorul BDE, care elimină utilizarea oricărui standard sau terță parte TTable, TQuery, și altele. Singura excepție este TAdoQuery (utilizând driverul ODBC). Și orice intermediar de date CCD, fie că este vorba TClientDataSet sau strămoșul său, cere pentru deschiderea de umplere sau proprietatea Nume_tabelă, sau specificați numele furnizorului (acesta din urmă este utilizat în TADOQuery;))))). Dar chiar și un set de date auxiliar atunci când specificând numele furnizorului va lucra cu datele furnizate pentru a le - și aceste date am nevoie să ia în considerare, și în propria lor schimbare. Și cu un set de date închis, nu se vor face modificări (((((((
Prin urmare, dacă cineva poate solicita TEAM-ului să completeze schimbarea câmpurilor din setul de date (sau să umple manual grilă, nici o diferență), ajutor. Nimic altceva nu este necesar :)))) (încă, nu primul an căsătorit, doar cu baze de date la acest nivel nu a trebuit să lucreze)


> Prin urmare, dacă cineva poate spune COMANDA pentru umplere
> modifică câmpurile din setul de date (sau umple manual grila,
> fără nici o diferență), ajutor. Nimic altceva nu este necesar :)))) (toate la fel,
> nu primul an căsătorit, doar cu baze de date la acest nivel
> nu a trebuit să lucreze)

Ce echipe? Inserați, adăugați, editați, ștergeți, încărcați?


> Și orice set de date intermediare, nu contează dacă este TClientDataSet
> sau strămoșul său, necesită deschiderea umplerii fiecăruia
> Proprietăți TableName sau numele furnizorului (ultima
> și este folosit în TADOQuery

În acest lucru vă sunt profund greșite, componenta RxMemoryData, există un anunț similar și EhLib magazine pachet un set de date direct în memorie și nu necesită nici un furnizor, precum și TClientDataSet, în cazul în care se execută în modul local (indicat printr-un nume de fișier pentru a salva tabelul).

Ce tip de buf? Poate că aveți nevoie de Form1.MemTableEh1.SetFieldData (.buf ^.)

Nu, în SetFieldData buf de tip pointer. Am verificat apoi codul sursă în EhLib - transformă automat șirurile după tipul de date specificat. Apropo, SetFieldData în MemTable nu este disponibil deloc - am tras-o de la protejat la public. Okromya nu a făcut nimic.

Apoi nu înțeleg șirul buf: = AMySQLRow [i]
Ce fel de AMySQLRow?
Încercați buf: = @AMySQLRow [i] (sau @AMySQLRow [i] [1] dacă este o matrice de șiruri de caractere).

> Atunci nu înțeleg șirul buf: = AMySQLRow [i]
AMySQLRow [i] este numărul ordinal al unui pointer la un șir cu o valoare de câmp.
AMySQLRow - în general, o serie de valori PChar.

"pointer la un șir"?

AMySQLRow: matrice. de PString?
sau este o serie de șir?
Dacă acesta din urmă, atunci aveți nevoie de @ AMySQLRow [i] [1]

AMySQLRow. array de PChar

Și ce vom vedea cu ShowMessage (AMySQLRow [0])?

Nu știu, nu am încercat. Știu o bucată din program
var buf: șir;
începe
# xA0; buf: = AMySQLRow [0] ^
se încheie;

Rulați asta. Atunci veți înțelege de ce vă întreb.

procedura TForm1.FormCreate (expeditor: TObject);
var p: pchar;
# xA0; s: șir;
începe
# xA0; s: = "1234";
# xA0; p: = @ s [1];
# xA0; showmessage (p);
# xA0; s: = p ^;
# xA0; showmessage (e);
se încheie;

Nu exact.
# xA0; s: = "1234";
# xA0; p: = @ s [1];
# xA0; showmessage (p); // produce 1234
# xA0; showmessage (p ^); // output 1

ceva ce nu conducem acolo, IMHO. Cum se descriu parametrii MemTableEh1.SetFieldData?

În ceea ce privește liniile - verificați dacă există o opțiune Project / Options / Compiler / Strings Huge și că nu există nici un $ H-

Un șir foarte important este inclus. De asemenea, directivele nu sunt exact.
Iată descrierea parametrilor - SetFieldData (câmp: TField, buf: pointer [, NativeFofmat: boolean]). După părerea mea. Mai exact, învăț doar mâine - acasă aproape că nu mă duc la computer și nu iau proiectul cu mine gjnjve

Apoi pare să funcționeze. La urma urmei, buf indică datele, judecând după răspunsurile tale. Poate datele sunt afișate incorect?

PS. După 10 minute, mă întorc acasă

Am găsit o greșeală, nu a mea. În sursele MemTableEh există procedura SetFieldData, iar procedura este ascunsă

# xA0; procedura BufferToVar (var Data: Variant);

Deci, în cadrul procedurii există un semn de date lipsă, adică merită
# xA0; începeți
# xA0; # xA0; câmpul Case.DataType din
# xA0; # xA0; # xA0; ftString, ftFixedChar, ftGuid:
# xA0; # xA0; # xA0; # xA0; Date: = String (PChar (Tampon));

în loc de
# xA0; începeți
# xA0; # xA0; câmpul Case.DataType din
# xA0; # xA0; # xA0; ftString, ftFixedChar, ftGuid:
# xA0; # xA0; # xA0; # xA0; Date: = șir (PChar (Buffer ^));

Astea sunt plăcintele.
Singurul lucru care nu funcționează încă - AppendRecord, trebuie să treci prin grădină

Am început deja să bănuiesc că glitchul este într-adevăr conectat cu componenta. Cu componente non-standard, există întotdeauna o șansă de a face probleme. Este bine că există surse.

Și cu ajutorul AppendRecord ajutor? Am o grădină de legume

Articole similare