Stupid Vb 6
Last Updated: Oct 25 2004 13:26, Started by
DeathRipple
, Oct 03 2004 11:47
·
0
#19
Posted 06 October 2004 - 09:09
@DeathRipple:
Si totusi, trebuie sa folosesti % in loc de * pentru a construi o sintaxa SQL in VB. Si renunta la CursorType= adOpenForwardOnly, mergi pe adOpenKeyset ca sa poti avea un RecordCount. Incearca sa inlocuiesti secventa ta de cod cu urmatoarea: '---------------------------- Dim con As ADODB.Connection Dim rec As ADODB.Recordset Set con = New ADODB.Connection Set rec = New ADODB.Recordset con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\db1.mdb" rec.Open "select id_acc, nume_acc, val_acc FROM caract_acc WHERE nume_acc='Locatia' AND val_acc Like '%" & fr2_2_cmb.Text & "%'", con, adOpenKeyset, adLockReadOnly MsgBox rec.RecordCount '---------------------------- Edited by NostraDamnUs, 06 October 2004 - 09:11. |
#20
Posted 06 October 2004 - 09:45
NostraDamnUs, on Oct 6 2004, 10:09, said: @DeathRipple: Si totusi, trebuie sa folosesti % in loc de * pentru a construi o sintaxa SQL in VB. Si renunta la CursorType= adOpenForwardOnly, mergi pe adOpenKeyset ca sa poti avea un RecordCount. Incearca sa inlocuiesti secventa ta de cod cu urmatoarea: '---------------------------- Dim con As ADODB.Connection Dim rec As ADODB.Recordset Set con = New ADODB.Connection Set rec = New ADODB.Recordset con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\db1.mdb" rec.Open "select id_acc, nume_acc, val_acc FROM caract_acc WHERE nume_acc='Locatia' AND val_acc Like '%" & fr2_2_cmb.Text & "%'", con, adOpenKeyset, adLockReadOnly MsgBox rec.RecordCount '---------------------------- adOpenKeyset este mai costisitor dpdv al resurselor alocate decat adForwardOnly. Plus ca la mine exemplul lui @deathripple a mers perfect cu adForwardOnly. Problema din nou e la % care tb sa inlocuiasca * din sql select-ul din VB. Ca tip de solutie cea mai buna este insa ce cu SELECT COUNT(*) ... :raygun: |
#21
Posted 06 October 2004 - 09:55
NostraDamnUs, on Oct 6 2004, 10:09, said: @DeathRipple: Si totusi, trebuie sa folosesti % in loc de * pentru a construi o sintaxa SQL in VB. Si renunta la CursorType= adOpenForwardOnly, mergi pe adOpenKeyset ca sa poti avea un RecordCount. Incearca sa inlocuiesti secventa ta de cod cu urmatoarea: '---------------------------- Dim con As ADODB.Connection Dim rec As ADODB.Recordset Set con = New ADODB.Connection Set rec = New ADODB.Recordset con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\db1.mdb" rec.Open "select id_acc, nume_acc, val_acc FROM caract_acc WHERE nume_acc='Locatia' AND val_acc Like '%" & fr2_2_cmb.Text & "%'", con, adOpenKeyset, adLockReadOnly MsgBox rec.RecordCount '---------------------------- sa traiesti multi ani feiriciti nenea...asa ii....merge acum....numa' imi zici si mie acum unde-i dif intre cele doua bucati de cod? imi place sa si stiu de ce sa fac asa si nu altfel...caut logica adica :) danke |
#22
Posted 07 October 2004 - 10:54
Dupa cum spunea si sp_attach_db, problema principala pentru care secventa ta de cod nu functiona era caracterul '*' din sintaxa SQL, care trebuia inlocuit cu '%'.
Poate si cursorul adOpenForwardOnly ti-a creat ceva probleme. Aici intram in sfera parerilor impartite. @adOpenForwardOnly, teoretic ai dreptate, cursorul adOpenKeyset aloca mai multe resurse. In practica insa, diferenta este insesizabila. Prin urmare, primeaza simplicitatea codului. Sa nu uitam ca VB-ul este un mediu RAD, prioritara este viteza de dezvoltare si simplitatea codului. SELECT COUNT(*) ... nu este cea mai buna solutie in cod. Sa deschizi un recordset doar ca sa-ti returneze un cont, nu ma incanta ideea. Dar, repet, aici suntem deja pe teritoriul parerilor personale, diferite de la un programator la altul. |
#23
Posted 07 October 2004 - 14:08
@nostradamus: eshti simpatic in sensul bun
Sunt de acord ca simplitatea/usurintza in utilizare primeaza in VB. Problema e ca dragul de @DeathRipple nu a dat detalii suplimentare: 1. daca este aplicatie multi user (nu prea cred) 2. daca sunt multe inregistrari in tabela "caract_ac". Daca da atunci gandestete ca recorsetul obtinut in varianta in cu "SELECT id_acc, nume_acc, val_acc .... " va contine - posibil - multe inregistrari (daca gradul de selectie este mic) fapt ca va duce la alocarea unor resurse suplimentare necesare memorarii recordsetului respectiv. Ce te faci daci SELECT-ul intoarce 500/1000 de inregistrari. Compara cu varianta: Daca folosesti "SELECT COUNT(*) FROM ..." atunci recorsetul va contine o singura valoare : nr. de inregistrari si cu siguranta va necesita mai putine resurse. Fiecare crede ce vrea si face ce doreste ... Toate cele bune @nostradamuse :raygun: |
#24
Posted 08 October 2004 - 08:40
@sp_attach_db: :coolspeak:
Sunt de acord cu tine. Daca aplicatia respectiva e multiuser pe Access db, atunci trebuie atentie maaare la interogari si construirea de recordseturi... dar mai ales la distrugerea lor! In fine... Sa speram ca DeathRipple e pe drumul cel bun, sa-i uram succes! Toate cele bune si tie, sp_attach_db. Succes la "dosarele secrete"... |
#25
Posted 08 October 2004 - 11:56
@NostraDamnUs
"dosarele secrete" ale sql server-ului si ... ;) Dupa cum vezi l-am dotat pe Ralph cu un gun :raygun: :lol: |
#26
Posted 10 October 2004 - 18:04
... va prea multumesc pt indicatiile voastre...s-au dovenit a fi de ajutor.
acum...o noua problema. vreau sa dau posibilitatea la user sa printeze ceea ce cauta in baza de date. mai clar: dupa ce-si alege anumite criterii de selectie, pe ecran apar, intr-un listbox, mai multe produse, fiecare cu niste caracteristici. vreau sa ofer posibilitatea de a printa o lista sub forma unui tabel, cu un numar de coloane fix si nr de linii variabile, avand cap de tabel etc....cum fac eu lucrul asta frumos si curat in VB6? macar niste hint-uri daca nu un tutorial scurt si la obiect multumesc mult Edited by cretze, 11 October 2004 - 07:52. |
#27
Posted 10 October 2004 - 18:06
aplicatia e dedicata sa ruleze pe o singura masina ;) so, no problems with the recordsets
|
#28
Posted 10 October 2004 - 19:34
...
și acuma rubrica de hinturi: 1. folosește obiectul Printer + NewPage,Print "ceva",EndDoc 2. afișează datele într-un grid a cărui conținut poate fi ulterior tipărit ușor 3. folosește un generator de rapoarte 4. du rezultatele într-un fișier *.txt pe care îl tipărești ulterior 5. afișezi rezultatele într-un form sau picture box separat și apoi folosești metoda Print (nu știi ce-i aia metodă ? Pune mânuța și citește MSDN-ul în loc să pierzi vremea pe net) Toate cele bune :raygun: Edited by cretze, 11 October 2004 - 07:51. |
|
#29
Posted 25 October 2004 - 13:26
Stiu ca e cam tarziu ptr raspuns, dar...
daca mai ai nevoie de un generator de rapoarte tip text (in vb6), care preia date dintr=un tabel dat (ii spun intr-un type baza de date, tabelul, capul de tabel - ce sa afiseze in loc de denumirea campului - daca sunt coloane excluse si multe altele) si le scrie intr=un fisier text pe care il deschide intr-un editor gen Notepad, unde mai poti face niste formatari (RTF), salva si trimite la imprimanta.... daca mai ai nevoie, deci, pot sa ti-l dau. |
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users