Adatbáziskezelés Delphi-ben

Adatbáziskezelés Delphi-ben
2002-05-15T20:09:20+02:00
2005-05-06T07:16:04+02:00
2022-10-31T23:55:40+01:00
  • Ez tény, de ettől az é betű problémája nem fog megoldódni. Igen, a charset-re gondoltam.
    Mutasd a teljes hozzászólást!
  • Az sqldialect 3 legyen.
    Mutasd a teljes hozzászólást!
  • Charset-re gondolsz?

    Charset: WIN1251
    Dialect: 1

    Ezeket a beállításokat használtam.
    Mutasd a teljes hozzászólást!
  • 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).
    Mutasd a teljes hozzászólást!
  • 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...

    Ötlet, tipp? (Előre is köszi mindenkinek.)
    Mutasd a teljes hozzászólást!
  • Köszi!

    É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.

    De még nem adtam fel, talán lesz vmi :)

    Köszi minden segítséget
    Mutasd a teljes hozzászólást!
  • 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.
    Mutasd a teljes hozzászólást!
  • Hello!

    Köszi a választ, de inkább küldök forrást!

    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:

    dm.tblvalami.FindNearest([cmbxCikkszam.text]);
    dm.tblvalami.FindNearest([cmbxGepjarmuAzonosito.text ]);
    cmbxCikkszam.Text := dm.tblvalami.fieldbyname('Cikkszam').AsString;
    cmbxGepjarmuAzonosito.Text := dm.tblvalami.fieldbyname('GepjarmuID').AsString;
    eAlvazSzam.Text := dm.tblvalami.fieldbyname('AlvazSzam').asstring;
    eRendszam.text := dm.tblvalami.fieldbyname('Rendszam').asstring;
    eSzin.text := dm.tblSzin.fieldbyname('Szin').asstring;
    eFajta.text := dm.tblFajta.fieldbyname('Fajta').asstring;
    eGyartmany.text := dm.tblGyartmany.fieldbyname('Gyartmany').AsString;

    Így szépen kikereshető a kívánt rekord!

    ÉS a kiválasztott rekordot szeretném kiprintelni qreportban, vagy word.doc fájlként.
    Namost a querry hogy tudna itt szinrelépni???
    Köszi előre is!
    Mutasd a teljes hozzászólást!
  • 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 !
    Mutasd a teljes hozzászólást!
  • 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
    Mutasd a teljes hozzászólást!
  • ÜDV!

    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 ==--__
    ****************************************
    Mutasd a teljes hozzászólást!
  • Üdv,

    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.

    Az eredeti sql-ben igy kellene:

    Select nev
    From dolgozo
    where bedatum>{01.01.95};
    Mutasd a teljes hozzászólást!
  • Üdvözletem
    dbgrid adott oszlopából (ami table1-ből szedi az adatokat)kellene randomolni 3 mezőt és kiiratni

    köszike
    Mutasd a teljes hozzászólást!
  • bocs, a lényeg kimaradt. az utolsó sorban a tazon; utáni ;-ot nem kell kiírni!
    Mutasd a teljes hozzászólást!
  • 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;');

    ?
    Mutasd a teljes hozzászólást!
  • 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 )

    Előre is köszi a válaszokat

    Bere
    Mutasd a teljes hozzászólást!
  • Hi!

    Ha így használod (select valami, sum(tyúkanyó)) akkor szerintem kell lennie egy 'group by valami' -nek is, különben nem tud összesíteni.

    A hibaüzenet is sokat segíthetne....
    Valamint ne használj ékezeteket Delphiből!

    Üdv Ponyi
    Mutasd a teljes hozzászólást!
  • 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.

    Remélem tudtok segítni.

    Előre is köszi
    null
    null
    Mutasd a teljes hozzászólást!
  • 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.
    Mutasd a teljes hozzászólást!
  • Köszi a gyors segítséget!
    Lenne még pár kérdésem:

    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?

    1000 köszönet: T
    Mutasd a teljes hozzászólást!
  • 1. Felrakod a Firebird adatbáziskezelőt.
    2. Létrehozod az adatbázisodat.
    Ezt legegyszerűbb egy kis sql fájl létrehozásával csinálni, valahogy így:

    create database 'proba.gdb';

    create table teszt(elso integer,
    masodik varchar(40));

    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.
    Mutasd a teljes hozzászólást!
  • Az installshield tud ilyet, de a delphi-d install cd-jén is kell hogy legyen egy REDIST nevű alkönyvtár és abban egy komplett BDE telepítő.
    Mutasd a teljes hozzászólást!
  • Sziasztok!

    Segítséget kérnék tőletek, abban, hogyan induljak neki az Interbase-nek.
    Egy kicsi D/-os példaprogram 1 db tábla kezelésével nagyon sokat segítene.

    Előre is köszi: Tibi
    Mutasd a teljes hozzászólást!
  • 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

    Üdv: T.

    Mutasd a teljes hozzászólást!
  • BDE-t. 1.4 MB a telepítő.
    Mutasd a teljes hozzászólást!
  • 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!
    Mutasd a teljes hozzászólást!
  • Hi!

    Kérdés.

    Hogyan lehetne egy DBLookUpComboBox értékét (a megjelenített szöveget) frissíteni ha változik a Query aktuális rekordja mögötte?

    Előre is kösz!

    ZTY
    Mutasd a teljes hozzászólást!
  • Köszi szépen a segítséget, mindjárt kipróbálom. Sajnos az SQL nekem még nagyon nem megy. Remélem, most az egyszer sikerül. Köszi még egyszer: Szabi
    Mutasd a teljes hozzászólást!
  • 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:
    Query.Close; Query.ParamByName('FoszereploID').Value := Ertek; Query.Open;
    És csak azokat mutatja a query, amiket kell.
    Mutasd a teljes hozzászólást!
  • HI!

    Össze kell kapcsolni a táblákat : MASTER/DETAIL
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd