Databaze Firebird – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Databaze Firebird – Delphi – Fórum – Programujte.comDatabaze Firebird – Delphi – Fórum – Programujte.com

 

dyžon0
Stálý člen
7. 11. 2012   #1
-
0
-

Zdravim,
Prosim o pomoc.
mam dva pocitace v siti, propojene pres Switch.
nastavil jsem jim pevnou IP adresu a to:
pc MARIKA .. 192.168.1.101 .. je na nem ulozena databaze + aplikace,nasdilena slozka d:\Sdileno a v ni adresar zakazky/Test
pc ROBERT .. 192.168.1.102 .. je na nem jen aplikace

na obou pc jem nainstaloval Firebird 2.5 a IBExpert
na pc MARIKA jsem v IBExpert vytvoril databazi:
-Server: .. remote,
-Server name: .. 192.168.1.101,
-Protocol: .. TCP/IP
-Database: .. \\MARIKA\Sdileno\zakazky\Test\Test.FDB,
-SQL Dialect: .. Dialect 3,
-User/Password: .. SYSDBA/masterkey
-firebird 2.5
soubor Test.FDB se ve slozce vytvoril
pak jsem vytvoril tabulku Test1,pridal nejaky Fieldy a zkompiloval.

na pc ROBERT jsem v IBExpert zaregistroval vytvorenou databazi,ale kdyz jsem se k ni chtel pripojit, tak mi to vyhodilo tuhle hlasku:

v Delphi7,ktery jsou v pc ROBERT,jsem vytvoril novou aplikaci a na formular jsem dal IB Database, DatabaseName jsem nastavil na soubor Test.FDB,ale kdyz jsem chtel nastavit Connected na True, tak mi to vyhodilo zase tuhle hlasku:

uz jsem z toho zoufalej .. ping mezi pocitaci probehne v pohode ...
poradite mi prosim ...

Nahlásit jako SPAM
IP: 89.102.38.–
mjseven0
Návštěvník
7. 11. 2012   #2
-
0
-

Na PC Robert zkus dat za IP adresu serveru ještě čislo portu: 192.168.1.101:3050
Aspoň myslím, že je to 3050 a že se to zapisuje takhle, nejsem teď u pc s Firebirdem a IBExpertem.
Taky možná budeš muset nastavit alias databaze a nezapisovat přímo cestu k souboru.
Dál na Marice zkontroluj zda běží služba firebird serveru, vypni na Marice IBExperta, zvlášť pokud k db nepřistupuješ přes TCP/IP, ale přímo (pak si ten soubor drží IBExpert a nepustí k němu nic jiného)
Taky zkontroluj firewall na Marice zda ti neblokuje port 3050.
Dej sem případně screen nastavení připojení  IBexpertů z obou PC.
 

Nahlásit jako SPAM
IP: 213.151.83.–
dyžon0
Stálý člen
10. 11. 2012   #3
-
0
-

#2 mjseven
diky, nakonec jsem to zjistil: DatabaseName se musi napsat v tomto zneni:

IP_Server:Cela adresa k souboru,.  v mym pripade teda: 192.168.1.101:D:\Sdileno\Zakazky\Test\Test.FDB
pak se vse pripoji jak ma ..
mam ale jeste par problemu,tak bych Vas chtel poprosit o radu:

1. Nefunguje 

IBQuery1.delete;

kdyz dam ale na formular DBNavigator a do procedury BtnDeleteClick napisu 

  DBNavigator1.BtnClick(nbDelete);

tak to funguje,ale vyhodi to hlasku (ShowMessage) " Delete Record?" ,ja bych to chtel bud bez hlasky uplne, nebo si ji upravit. Nevite, kde bych stahl nejakej SourceCode DBNavigatoru ?? ,nebo neznate ten zapis nekdo z hlavy ?

2. EDIT, napsal jsem 

IBQuery1.Edit;
..
..
IBQuery1.post;

ale vyhodi to hlasku "Update Failed!" , ..  nevite proc ??  nebo se to musi zapsat jinak ?
pouzil jsem komponenty : IBDatabase, IBTransaction, IBUpdateSQL, IBQuery, DataSource.

3. Synchronizovat tabulku na vsech PC .. ted je videt jen to,co je vlozeno prave na onom PC, az kdyz se plikace vsude povypinaji a znovu zapnou, nactou se korektni udaje.Zkousel jsem i jako udalost onClick tlacitka napsat : 

  IBDatabase1.Connected:= false;
  IBDatabase1.Connected:= True;
  IBTransaction1.Active:= True;
  IBQuery1.Active:= True;

ale to nepomohlo, ... , prijde mi, ze se to do tabulky uklada az kdyz program vypnu uplne ..

dekuji.

Nahlásit jako SPAM
IP: 89.102.38.–
mjseven0
Návštěvník
12. 11. 2012   #4
-
0
-

Každou změnu dat (přidání, editaci, smazání), kterou nad datasetem (IBQuery1) provedeš musíš potvrdit v rámci transakce (Commit dat).
To uděláš buď zavoláním IBQuery1.ApplyUpdates nebo IBTransaction1.Commit.
Projdi si help, případně web, ať víš čím se to odlišuje. Každopádně ať to provedeš tak nebo tak, je vhodný to zaobalit pomocí bloku try..except, a v případě chyby při ukládání volat tzv. rollback dat, což provedeš buď přes IBQuery1.CancelUpdates nebo IBTransaction1.Rollback. 

Ohledně mazání:
Pokud použiješ IBQuery1.Delete, pro smazání aktuálního záznamu, tak v rámci události BeforeDelete si můžeš zobrazit vlastní potvrzovací dialog a ošetřit si mazání jak potřebuješ.

Při použití navigátora můžeš defaultní hlášení vypnout nastavením vlastnosti ConfirmDelete = False 
a pak si potvrzení zase ošetřit v BeforeDelete na datasetu. Navigator nedělá nic jiného, než že provolává příslušné metody datasetu. Případně to můžeš ošetřit v události OnClick na navigátoru.


 

Nahlásit jako SPAM
IP: 213.151.83.–
dyžon0
Stálý člen
14. 11. 2012   #5
-
0
-


Super, diky, ..  ukladani editaci,mazani mam uz vyresene, ..  sice asi ne uplne nejlepsim a nejrychlejsim zpusobem ,ale funguje to a jsem spokojenej, dokonce jsem uz i tvoril vyhledavani  a ikdyz taky funguje, precejen bych se chtel zeptat na nekolik veci:
 

procedure TForm1.BtHledatClick(Sender: TObject);
var s: string;
begin
  IBQuery2.close;
  IBQuery2.SQL.Clear;
  DBGrid1.DataSource:= DataSource2;

  if length(edit1.Text) = 0 then
  s := 'select * from TABLETEST6'
else
  s := Format('select * from TABLETEST6 where %s like ''%%%s%%''', [combobox1.Text, edit1.text]);

  IBQuery2.sql.Add(s);
  IBQuery2.Open;
  if IBQuery2.RecordCount = 0 then ShowMessage('nic tam neni');
end;

V ComboBox1 se vybira slupec a v Edit1 je hledane slovo.
No a ja bych potreboval, aby se pri vyhledavani ignorovaly maly/VELKY pismena a taky fonetika ěščřžýá a podobne.
rikal jsem si, ze maly velky pismena bych odstranil tim, ze vsechno pred vyhledavanim prevedu na velky AnsiUpperCase(Edit1.Text), ale nevim jak prevest ty v tabulce..  no a s tema ěščř nevim vubec..

Druha vec, kterou jsem zatim nezprovoznil je synchronizovani dat v aplikacich.
Zatim to mam reseny tlacitkem tak,ze vypinam a zapinam IBTransaction.

Cetl jsem neco o IBEvent, ale kdyz ji vlozim nastavim Database na IBDatabase1 a Registered:= true, spustim aplikaci,atk mi to hned vyhodi chybu: Database name is missing.

jeste jsem nekde cetl, ze se da poslat zprava jine plikaci i pres sit, ale to mi prijde strasne slozity a mozna i zdlouhavy, ..
 

Nahlásit jako SPAM
IP: 89.102.38.–
mjseven0
Návštěvník
20. 11. 2012   #6
-
0
-

Hodnotu v poli převedeš na velká(malá)  písmena pomocí Upper(Lower) přímo v SQL dotazu. 
select * from tabulka where upper(pole) like '%

místo sestavování dotazu se nauč pracovat s parametrickými dotazy a plněním jejich parametrů. Osobně bych se vykašlal na sestavování sql dotazů v delphi a prostudoval si vytváření uložených procedur. Uložené procedury jsou hodně silný nástroj rozumných SQL serverů. V klientském programu pak jen voláš tyto procedury se správně vyplněnými parametry.

Synchronizovat data na klientech pomocí IBEvent je možný, tuším že eventa se dá v db vyvolat pomocí triggerů, ale nevidím to jako úplně vhodný řešení. Popravdě nevidím moc smysl proč se snažit synchronizovat data na klientech eventou poslanou ze serveru.  Možná si to umím představit u nějaké malé takové té domácí aplikace, ale na velkých systémech, kde je současně připojeno několik desítek, stovek,... uživatelů, hrnoucích do db data by to generovalo pěkně vysokou zátěž.
Uživatel by na klientu měl pracovat jen s daty která ho momentálně zajímají, a refresh dat provádí na pokyn uživatele, nebo v nějaké rozumně definované časové periodě.
Proč vlastně chceš nutit klientským aplikacím refresh dat?

 

Nahlásit jako SPAM
IP: 213.220.235.–
dyžon0
Stálý člen
23. 11. 2012   #7
-
0
-

#6 mjseven
uz jsem to vyresil,ale dikec ...  ten program co vytvarim bude pouzivat jen asi max 10 lidi na siti, ... a refresh potrebuju proto,aby kdyz nekdo zada nejakou zmenu do tabulky,nebo vlozi novej zaznam,tak aby to ostatni videli co nejdriv .. 

Nahlásit jako SPAM
IP: 89.102.38.–
TomBr
~ Anonymní uživatel
1 příspěvek
22. 1. 2013   #8
-
0
-

Zdravím všechny, zvláště pak ty, co mi pomůřou...

Mám problém se zachytáváním eventů z FB serveru v Delphi aplikaci pomocí TIBEvents. Nikoli s prostupností firewallů, s použitými porty apod., ale se jmény těchto eventů. Pokud je název eventu jednopísmenný ('A', 'b', 'X',...), pak vše běhá jak má. Pokud je však delší ('A1, 'CHANGED',...), klientská aplikace je nezachytí. Pokud zaregistruji stejné eventy např. z Flamerobin, není s názvy žádný problém a všechny eventy chodí. Něco je tedy špatně s klientskou aplikací vytvořenou v Delphi 2009... ale co ?

Nahlásit jako SPAM
IP: 77.104.210.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Podobná vlákna

SQLConnection a Firebird — založil dyžon

Srovnání Mysql vs Firebird — založil oxidián

MAC php interbase firebird — založil oggy

Databáze — založil Rider

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý