[ pijavica. @ 17.04.2015. 21:54 ] @
Pozdrav svima.

Da li mozete da mi pomognete oko ovog problema.

Imam tabelu: GRADOVI
U tabeli kolona: MESTA

U koloni MESTA uneo sam informacije tipa:

Beograd,
Novi Sad,
Nis,
Kragujevac, itd

Kako mogu da uradim da kada u Edit polje ukucam (ne prvo slovo reci) npr. slovo: i
sa mi samo izbazi u pretragu one reci u kojima se nalazi slovo: i (Novi Sad, Nis)
ili ako ukucam slova: ra (Beograd, Kragujevac).

Hvala Vam puno.
[ savkic @ 17.04.2015. 23:31 ] @
U osnovi imas dve mogucnosti, da citavu tabelu ucitas u neki lokalni dataset i da onda tu indeksiras i pretrazujes. To je OK resenje za neke manje kolicine podataka, i bice nesto brze. Drugo resenje je da na svaki keypress saljes upit ka bazi i trazis od baze da ti filtrira podatke. Jedan takav filter bi otprilike ovako izgledao:

Code:

SELECT
  MESTA
FROM 
  GRADOVI
WHERE
  MESTA CONTAINING 'ra';
ORDER BY
  MESTA
[ salvaric @ 18.04.2015. 07:22 ] @
Ili:

Code:

SELECT
  MESTA
FROM 
  GRADOVI
WHERE
  MESTA LIKE "%'+Edit1.Text+'%"
ORDER BY
  MESTA

[ pijavica. @ 18.04.2015. 10:10 ] @
Hvala Vam,

ja citavu tabelu ucitavam u dataset preko AbsoluteDatabase.

Prva varijanta bi bila najbolja savkic. Svaki put bi morao da kliknem enter i da vidim rezultat.

Kako da uradim preko dataset da mi automatski izbaci u kojim redovima se nalazi to slovo.

Ovaj kod koristim kada zelim samo prvo slovo da pretrazim u Mesta.

Code:

if sEdit1.Text <> '' then
    begin
      ABSTable1.Filtered := False;
      ABSTable1.Filter := 'MESTA = ' + #39 + sEdit1.Text + #39;
      ABSTable1.Filtered := True;
    end
  else
    ABSTable1.Filtered := False;
[ savkic @ 18.04.2015. 11:14 ] @
Otprilike
ds.Filter := 'MESTA LIKE '''' + edtSearch.Text + '''';
[ pijavica. @ 18.04.2015. 12:46 ] @
Pokusao sam sa ovim kodom i kada stavim u Edit polje jedno slovo radi ali kada stavim drugo nece. I potom prijavljuje neke greske ???????????

Code:

procedure TForm1.sEdit1Change(Sender: TObject);
var sql: string;
begin
  Query.Close;
  Query.SQL.Add('select * from GRADOVI where');
  sql := 'MESTA like ' + QuotedStr('%'+sEdit1.Text+'%');
  Query.SQL.Add(sql);
  Query.SQL.Add('order by MESTA');
  Query.Open;
end;
[ savkic @ 18.04.2015. 13:38 ] @
A greske su?
[ pijavica. @ 18.04.2015. 14:22 ] @
Project SQLQuery.exe raised exception class EABSException with message 'End of SQL command expected, but 'select' found at line 4, column 1 - Native error: 20260'. Process stopped. Use Step or Run to continue.



To mi prijavljuje.
[ savkic @ 18.04.2015. 16:15 ] @
Na osnovu greske deluje da imas dva select izraza u kveriju. Proveri koji ti je tacan sadrzaj SQL propertija i naravno stavi da se prazni pre svakog novog kverija.
[ pijavica. @ 18.04.2015. 19:49 ] @
Hvala Savkic i Salvaric. Resio sam problem.

Nije bila greska u sadrzaju SQL-a. Vec u tom tome kao sto si rekao potrebno je da se prazni.

Morao sam isto da sredim sto se tice velika mala slova. Tako da konacan rezultat je ovaj kod i super funkcionise.


Code:

procedure TForm1.Edit1Change(Sender: TObject);
var sql: string;
begin
  ABSQuery1.Close;
  ABSQuery1.SQL.Clear;
  ABSQuery1.SQL.Add('select * from GRADOVI');

  sql := 'where (upper(MESTA)) like ' + QuotedStr('%' + Edit1.Text + '%');

  ABSQuery1.SQL.Add(sql);
  ABSQuery1.SQL.Add('order by MESTA');
  ABSQuery1.Open;
end;



Samo jes nesto da pitam. Za vas koja je najbolja baza za cuvanje podataka (Database). Da mogu da koristim preko Delphi a isto tako ujedno tu istu bazu podataka da mogu da koristim za web sajt.
Hvala.

[ savkic @ 18.04.2015. 20:06 ] @
> Morao sam isto da sredim sto se tice velika mala slova. Tako da konacan rezultat je ovaj kod i super funkcionise.

Moras i sadrzaj iz Edit1 da pretvoris u sva velika slova.

> Samo jes nesto da pitam. Za vas koja je najbolja baza za cuvanje podataka (Database). Da mogu da koristim preko Delphi a isto tako ujedno tu
> istu bazu podataka da mogu da koristim za web sajt.

Najbolja baza je ona sa kojom se ti najbolje snalazis. E sad ako zelis da istu stvar korisitis i za dekstop prg i za websajt to onda zavisi i od potreba aplikacije i hostinga.
Ako su neki manji podaci sqlite je savrsen, za nesto vece Firebird je odlicno resenje. Ako hosting to ne podrzava, onda se moras upravljati prema njemu ili koristiti dve baze.
[ pijavica. @ 18.04.2015. 21:13 ] @
Hvala na savetu. Sve najbolje.
[ salvaric @ 19.04.2015. 08:10 ] @
Ja sam koristio MySql bazu, po meni nema boljeg rešenja kad je u pitanju baza za dvostruku namenu (desktop i web). Možeš kreirati samo jednu bazu na netu i u nju upisivati podatke i čitati, i njoj pristupati i sa desktop računara, mada nije preporučljivo zbog pucanja veze ako je u pitanju neka kompleksnija aplikacija koja zahteva stalna ažuriranja podataka.
[ pijavica. @ 19.04.2015. 18:07 ] @
Citat:

mada nije preporučljivo zbog pucanja veze ako je u pitanju neka kompleksnija aplikacija koja zahteva stalna ažuriranja podataka.


Savkic preporucuje Firebird, ali sa hosting mozda budem imao problema. Moram da vidim na internet.

Ali ne zelim da imam dve baze. Nije mi problem da naucim i da pocnem da radim sa drugom bazom podataka. Posto imate vise iskustva nego ja zato pitam sta je najbolje. Inace radim na jednom programu koje zahtevaju stalno azuriranje i dosta podataka. Kako za mene tako i za moje buduce klijente. Jedna baza je odlicno resenje. Ali zelim da cujem i vase misljenje.
[ savkic @ 19.04.2015. 18:26 ] @
Da li ti imaš potrebe za sistemom koji će raditi sa istim podacima i u desktop okruženju i preko weba? Šta je od ta dva načina rada bitniji? I da li ćeš ti raditi hosting (na tvom serveru) ili negde na netu, i šta je tamo dostupno? Možda najbolje da opišeš detaljnije šta praviš.
[ pijavica. @ 19.04.2015. 20:41 ] @
Do sada kako sam razmisljao,

Citat:
Da li ti imaš potrebe za sistemom koji će raditi sa istim podacima i u desktop okruženju i preko weba?

Proizvodi koje cu da prodajem, mora da imam na internetu. Naravno, info o proizvodu (uvozna- prodajna cena, kolicina, popust, kako de se iskoristi proizvod itd.).
Kada govorim o ceni, kolicini i popustu to ce stalno da se azurira. Zato mi je potreban program pomocu koga cu da azuriram i automatski bude vidljiva na internetu.

Postoje ljudi koji traze da im posaljem cenovnik postom. Programom resim problem, ostampam sveze informacije, a ne u excel-u da uvek popravljam sta je novo itd. A postoje ljudi koji nemaju internet ali imaju pc. Tim klijentima bi slao program koji je napravljen za njih veoma jednostavam, a program koristi iztu bazu, takoreci deo baze.

Artikli bi u pocetku bili oko 100-150 kom, potom do 300-500 kom.
U programom bi imao o Racunima, informacijama o klijentima ...

Citat:
Šta je od ta dva načina rada bitniji?

Bitniji Desktop. Web je za informaciju i narucivanje proizvoda. I to mi je vazno.

Citat:
I da li ćeš ti raditi hosting (na tvom serveru) ili negde na netu, i šta je tamo dostupno?

Gledam da to bude na mom serveru. Ali zanima me, sta vi mislite? Moj server ili Net? I zasto je to dobro?


Hvala vam
[ savkic @ 19.04.2015. 21:45 ] @
Imas vise varijanti:

1) baza u lokalu sa application serverom koji opsluzuje desktop i web programe
2) baza u lokalu i direktan pristup njoj iz desktop i web programa (ISAPI, PHP, JS ili sta vec imas)
3) baza u lokalu, desktop prg vezan na nju, baza na netu i web prg koji radi sa njom, i neki vid sinhronizacije izmedju njih dve
4) baza na netu, desktop i web program joj direktno pristupaju

Sta odabrati zavisi od kolicine podataka, obima transakcija, u cemu planiras da pises web resenje i slicno, ja bih licno uzeo varijantu 1.
[ captPicard @ 19.04.2015. 23:16 ] @
Ajde da se i ja uključim, mada smo već malo offtopic. Kakva imate iskustva sa sinhronizacijom? MySQL na hostingu i MySQL na local pc. Kako vršiti sinhronizaciju? Ili MySQL hot/Firebird local.
[ savkic @ 19.04.2015. 23:26 ] @
Ako mene pitas, to nisam radio. Ali tipujem da ima nekih besplatnih ODBC replikatora.
Ili ako je u pitanju prosta jednosmerna sinhronizacija (lokal -> web) onda se moze napraviti i neki custom prg koji ce generisati sql (INSRT, UPDATE, DELETE) za izmenjene recorde.
[ pijavica. @ 20.04.2015. 07:49 ] @

Sto se tice,
(4): Ne bih hteo. Posto u bazi ima dosta poverljivih informacija itd. A to necu da kacim na netu. Sve je to na Net. Nemas Net nemas nista.

(2) i (3): To bi bila druga varijanta.

(1): Da li mozes da mi objasnis (baza u lokalu sa application serverom)? Koju bazu najbolje da koristim? Application server? Zasto bi uzeo ovu varijantu?


ps.

Za captPicard-a. To sto je savkic rekao je jednostavno resenje. Ni ja o tome ne znam mnogo a nikad nisam radio.
Na Netu sam o tome gledao i ima mnogo informacija o tome (Kako, Sta, da se uradi).
[ salvaric @ 20.04.2015. 08:15 ] @
Koristio sam dve MySql baze, lokalnu i na webu i nisam imao nikakvih problema.

Kreirao sam CLIENT aplikaciju koja radi u pozadini i na svakih 30 sekundi proverava lokalnu bazu dal ima nekih novih slogova ili korigovanih i kroz sql šalje podtke na web bazu.

To sam izveo tako što sam u svaku tablu, koju trebam da sinhronizujem, dodao true/false polje, koje client proverava i prosleđuje u koliko je false i nakon toga vraća ga na true.

Kad se vrši korekcija nad nekim slogom, promeni se polje na false kako bih se sinhronizovala izmena.

Jedino sa čim sam imao mali problem jeste slogovi koji su izbrisani, morao sam dodati dodatnu kolonu "DEL" (true/false), u koliko se slog briše iz programa polje "DEL" se promeni na true, pošalje se na web bazu sql upit "DELETE FROM TAB...", i nakon toga se slog briše i sa lokalne baze, s tim da sam morao dodati filter u glavnom programu nad query-jima za prikaz tih podataka (filter="DEL=false"), kako bi nestali sa liste nakon brisanja.

Jeste malo konfuznije al meni je radilo posao, imo sam ograničen rok pa mi nije ništa konstruktivnije padalo na pamet, nisam ispitivao MySql-om replicator.
[ savkic @ 20.04.2015. 10:04 ] @
> (1): Da li mozes da mi objasnis (baza u lokalu sa application serverom)? Koju bazu najbolje da koristim? Application server? Zasto bi uzeo ovu varijantu?

Najbolja baza ne postoji, sve to zavisi od potreba programa. Uzmi neki RDBS sa kojim si najviše radio do sada.
Ako napraviš application REST server onda on može opsluživati bilo koji klijent sa istim kodom i na isti način, desktop, web, mobile.
[ pijavica. @ 20.04.2015. 12:56 ] @
Ok. Hvala puno.
[ FranjoZG @ 21.04.2015. 07:44 ] @
Radio sam sinhronizaciju (koja se svakodnevno vrti). Local: Firebird, net: MySQL. Tablice imaju identične fieldove.

U lok. bazi imam polje "poslan" u koje se upisuje 1 ako je poslan na net.

Baza sama pri izmjeni, u trigeru, upisuje 0.

Za brisane slogove imam posebnu tablicu s poljima:
-TableName
-KeyField
-KeyValue
tablica za brisane slogove se popunjava u trigeru "Before Delete"