Nekem nem szokott ilyen gondom lenni. Bár az is igaz hogy én 1.0.3-mas Firebirdet használok. Szvsz nézd meg hogy milyen codeepage alatt hoztad létre az adatbázist (én 1.0.3 alatt NONE-t szoktam beállítani).
dbExpress + Firebird 1.5 párosítással kísérletezem, mert áttérnék BDE-ről.
Az a problémám, hogy az olyan rekordok, amelyek például 'é' betűt tartalmaznak, nem kerülnek rögzítésre az adatbázisban.
Vajon mi ennek az oka?
Valamint, a TSimpleDataSet-nél, a mezőknél hiába kapcsolom ki a Required-et, nem képes post-olni a rekordot, kiabál, hogy hiányzik az adat...
Ha ID nélkül készítem a select-et, akkor ugyan jó, de hát bizonyos esetekben kéne (legalábbis nem ártana) az ID is...
Én viszont még mndig menekülve a querry-től inkább pofon egyszerűen filterezem a táblát és a kivánt rekord marad csak meg, így a qreport csak öt képes megjeleníteni... :))
De még mindig nem buli mert a qreporton nekem több tábla rekordjai is szerepelni fognak!
Így hát kérdezem, hogy van esélyem, hogy a title,detail Band-eket tetszés szerint helyezzem el??
Mert most ez bosszant a legjobban, hogy nem engedi őket átméretezni,áthelyezni úgy ahogy én akarom.
Ehelyett csinálsz egy query-t amiben az van hogy select * from valamelyiktabla where cikkszam=:cikkszam and gepjarmuazonosito=:gepjarmuazonosito.
Aztán a params-ban beállítod a típusát, ez után ha az query active-jét true-ra tudod állítani, azaz jó az SQL mondatod.
Ez után azt mondod hogy
with myquery do
begin
active:=False; params[0].AsString:=cmbxCikkszam.text;
params[1].AsString:=cmbxGepjarmuazonosito.Text;
active:=True;
if not (BOF and EOF) then
begin
eAlvaz.Text:=FieldByName('Alvaz').AsString;
...
end;
end;
A combo kitöltése és a többi móka maradhat a régiben.
Feltöltöm a kombobokszot amiből majd kikeresem a rekordot:
tblvalami.open;
while not tblvalami.Eof do
begin
cmbxCikkszam.Items.add(tblvalamiCikkszam.asstring);
cmbxGepjarmuAzonosito.Items.add(tblGepjarmuGepjarmuID.asstring);
tblvalami.next;
end;
Majd hogy a többi rekord is látható legyen más táblákból amik össze vannak már kötve kulcsokkal:
Sziasztok !
Segítséget kérnék egy programozási technikai ügyben.
Két adattábla master-detail kapcsolódásánál a többes oldalon a rekordok valamely mezőjének értékét össze szeretném adni.
Hogyan tehetem ezt meg !
Ez egy számlázási progi lenne, ahol a számla tételeinek értékét kellene összeadni. Próbáltam felvenni egy új mezőt (Fields Editor)amnek a típusa TAggregate de az expression beállításánál a SUM(Mezőnév.Value) nem jelenít meg semmit !
Több lehetőséged is van.
1. Ha ismertek a feltételek eleve olyan query-t csinálsz ami az adott feltételekkel rendelkező sorokat tartalmazzas.
2. Ha delphi 6-7 van akkor csinálsz egy clientdatasetet és feltöltöd.
3. Filter
Van egy form rajta kiválogatom a rekordok közül az aktuálisat.
Majd QReport-ban ki akarom nyomtatni a kiválasztottat és a hozzá tartozó rekordokat...
Mindezt hogyan kell megadni, hogy szegény ne az egész táblát listázza, hanem csak a kijelölt rekordot !
Ebben kérek sgítséget!
**************************************** __--== ForEver SQL ==--__
****************************************
Azt szeretném megkérdezni, hogy a query komponens sql metódusába beírt sql parancsoknál milyen szintaktika szerint tudok hivatkozni a dátum tipusú adatokra.
nem így kéne:
adoquery1.sql.Add('SELECT RENDEL.TAZON, Sum(RENDEL.RMENNY) AS SumOfRMENNY');
adoquery1.sql.Add(' FROM RENDEL');
adoquery1.sql.Add(' GROUP BY RENDEL.TAZON;');
Köszönöm a választ, de a lekérdezés működik accessben!!! Meg akkor is működik ha tervezési időben adom meg az adoquery.sql nek a lekérdezést. Ha viszont futás közben adom meg a lekérdezést így:
adoquery1.Close;
adoquery1.sql.clear;
adoquery1.sql.Add('SELECT RENDEL.TAZON, Sum(RENDEL.RMENNY) AS SumOfRMENNY');
adoquery1.sql.Add('FROM RENDEL');
adoquery1.sql.Add('GROUP BY RENDEL.TAZON;');
adoquery1.open;
Ez esetben a 3. sornál elszáll. A hibaüzenet a következő:
Project VGHELPER.EXE raised exception class EAccessViolation with message "Access violation at Address ..... in modul msjet40.dll. Read of address..." Process stoped.
Még valami. A legszebb az egészben hogy ha delphiből indítom tehát F9-el akkor megcsinálja az exe-t elindítja és hibával kilép. Ha nem delphiből indítom hanem pl totalcommanderből akkor gyönyörűen lefut az exe hiba nélkül. Na erre mit szóltok? (Persze lehet hogy ez csak nekem gyanus )
Szevasztok. Lenne egy kérdésem. Delphiből access adatbázist kezelek. Ez nagyszerű meg ment is minden aztán amikor jött egy olyan legérdezés amiben van Sum. Ha tervezési időben az adoquery sql tulajdonságába beírom akkor nincs gond vele, de ha futás közben csinálom tehát:
adoquery.sql.add('Select valami, sum(tyúkanyó)');
Na amikor elér ehez a sorhoz egy gyönyörű hibaüzenet jelenik meg és a msjet40.dll-re hivatkozik. Szóval nem teljesen vágom hogy mi a gond.
A lekérdezéssel nincs gond (accessben működik) az adoquery is close-olva van és az sql tulajdonsága pedig clear-elve.
Szóval nem tudom mi lehet.
1. A Firebird az Open IB a nyílt forráskódú közösség által javított változata. firebird.sourceforge.net.
2. Igen
3. Igen, a dbExpress fülről lehet leszedni ha Delphi6-od vagy 7-ed van. Ha régebbi akkor viszont peched van, marad a BDE, IBExpress, stb.
4. Igen, de csak akkor ha a kliens datasetnek kiadod az applyupdates parancsot. A dolog úgy néz ki hogy van egy egyirányú lekérdezés (ez a query) és egy cahche dataset (ez a TClientDataSet). A kettőt egy TProvider köti össze aki a TClientDataSet-ben végrehajtott változásokat (törlés, módosítás) visszaírja az adatbázisba ha szépen megkéred rá (ApplyUpdates). Ezt a három komponenst foglalja magában a TSQLCLientDataSet vagy újabban a TSimpleDataset (ez utóbbit annyira nem ismerem, én a TSQLClientDataSet-et használom mert az van a Kylixban).
BDE alatt nem kell ApplyUpdates, ott a cachelésről maga a BDE gondoskodik (ha kell ha nem, Pl. egy html tábla legenerálásakor ez meglehetősen felesleges tevékenység). Ráadásul a TClientDataSet egy rakás más trükköt is tud, Pl. klónzni is tudja magát.
5. Valahol láttam ilyet a neten de nem emléxem hogy hol. De az újabb Delphis/Kylix-os könyvekben szvsz benne van.
1.
A Firebird telepítőt honnan szerezzem be? Mire való? Nekem van már free 6.x-os InterBase-em a Borland.com-ról.
2.
Az isql ugye az interbase client része?
3.
Az SQL Select-et értem. A lekérdezés (TSQLClientDataSet, ez olyan mint a TTable adatforrás?) eredményét benyomom egy datagridbe a datasource-on keresztül.
Az említett datasource-ot és datagridet melyik komponenslapról szedjem össze és pontosan ezen a néven van?
4.
Ha a gridben módosítok adatot, akkor a TSQLClientDataset-en keresztül ez képes tényleg frissülni az adatbázisban?
5.
Egy rövidke ismertetőt kaphatnék a DBExpress komponenseiről?
insert into teszt values(1, 'első');
insert into teszt values(2, 'második');
insert into teszt values(3, 'harmadik');
insert into teszt values(4, 'negyedik');
ezt tedd le egy sql.txt nevű fájlba.
Erre ha ráengeded az isql.exe-t (isql.exe -u sysdba -p masterkey -i sql.txt
Ekkor keletkeznie kell egy proba.gdb nevű adatbázisfájlnak.
3. Meg kell csinálnod az alkalmazást.
A kapcsolatra több lehetőséged is van (BDE, Interbase Express, dbExpress, stb).
Én leginkább a dbExpress-t ismerem, úgy hogy azt mondom el (ez Delphi6-ra vagy Kylix-ra vonatkozik):
1. Tegyél fel a formra egy TSQLConnection komponenst. Állítsd be a Drivername-et Interbase-re, a loginprompt-ot false-ra, a
params-ban pedig az első sorban az adatbázis útvonalát állítsd be a proba.gdb-re, az SQLDialect-et pedig 3-ra.
Ez után állítsd a connected-et igazra, ha mindent jól csináltál akkor létrejön a kapcsolat, ha nem akkor a rendszer megmondja hogy szerinte kb. mi a baj.
2. Tegyél fel egy TSQLClientDataSet-et (D7 alatt ilyen nincs, ott a TSimpleDataset-et lehet használni hasonló célra, vagy megtalálod a TSQLClientdataset-et a példa progik között de akkor külön kell instalĺálni. A DataSet DBConnection-ját állítsd az SQLConnection1-re. A CommandText-be pedig írd be: SELECT * FROM teszt
Az Active-et állítsd true-ra. Ha minden Ok, akkor ez a kapcsolat is él.
3. Tegyél fel egy datasource-ot és egy datagridet, ezeket már értelemszerűen össze tudod kötni.
4. Az adatok akkor íródnak be az adatbázisba ha mondasz a TSQLClientDataset-nek egy Applyupdates-t
Nagy vonalakban ennyi, a többi interfész esetén is nagyjából hasonló a dolog de azokról nem tudok annyit hogy fejből ideírjam neked.
1.
A BDE a megoldás (Borland Database Engine). Ha ezt felteszed, akkor az összes fontos adatbáziskezeléshez kapcsolódó rendszerfájlt telepíted.
Pl.: BDE Admin-nal tudsz aliasokat managelni.
2.
Készíts a programodból az InstallShield Express programmal egy installálható változatot. Ez a program megtalálható a Delphi telepítő CD-n.
Ha valamiben elakadsz, akkor segítek!
bigbang@freemail.hu
Egy kérdésem lenne! Van 1 programom a qreportot készít az adatokat meg egy paradox adattáblából veszi. Mit kell feltelepítenem egy olyan gépre amin nincs delphi ahhoz hogy működjön a progi?, mert nem tudom használni az adatbázist!
Miért nem megy sql-el?
select * from tVideo inner join tKapcsolo on tVideo.VideoID = tKapcsolo.VideoFK where tKapcsolo.FoszereploFK = :FoszereploID
A tFoszereplo AfterScrolljába beteszed: