Delphi tábla és a firebird default

Delphi tábla és a firebird default
2006-09-22T07:55:42+02:00
2006-09-26T18:23:16+02:00
2022-11-01T15:00:39+01:00
nova76
készitettem egy táblát:

create table proba
(m1 integer default 100 not null, m2 varchar(10));

ha (delphi Tsimpledataset, TTable vagy TIBTable komponensekkel) beszúrok egy sort, amiben nem adok értéket az m1 mezőnek, akkor hibaüzenetet kapok: 'field m1 must have a value'

hogyan tudnám elérni, hogy ezt a firebirdre bizza a delphi? Hiszen a default értéket már megadtam az adatbázis szerkesztésekor. Vagy hiába dolgoztam?
Mutasd a teljes hozzászólást!
Ez nem egészen így működik.

Ahhoz, hogy ne kapj hibaüzenetet vagy kitöltöd magadnak, vagy a FIELD tulajdonságainál kiveszed a REQUIRED jelzőt.

A default érték pedig csak akkor fog érvényesülni, ha rögzíted a rekordot, mivel az csak akkor íródik az adatbázisba (szerkesztés közben csak a Delphis objektuma létezik). Tehát ha szerkesztési időben is szeretnéd használni az alapértékét (közvetlenül a dataset.append után), akkor ne adatbázis-szinten adj neki default értéket, hanem delphiben.
Mutasd a teljes hozzászólást!

  • Alapesetben szerintem tábla létrhozási logikádban van a hiba...

    Miért nem lehet egy mező értéke null, ha kap értéket akkor, ha a mező értéke null...

    javaslom az adattábla modósítást, és a TIbDataSet használatát! Amiben a refresh csak az éppen aktuális sort refresheli... hisz az adatbázisban végbemenő változásokat, változtatásokat, a programban, csak refresht követően látod majd!
    Mutasd a teljes hozzászólást!
  • "Miért nem lehet egy mező értéke null, ha kap értéket akkor, ha a mező értéke null..."

    Nem egészen erről van szó.

    Egy Primary Key nem lehet null, viszont triggerrel és generátorral kényelmesen megoldható, hogy rögzítésnél egy következő ID-t tépjen magának a tábla.
    Kényelmes az lenne, ha mindig tépne magának magától és nem nekem kellene beállítani egy értéket (pl m1.asInteger:=100), ami ráadásul teljesen felesleges (hiszen 100-as értéket csak egyszer fog kapni, a generátor és a trigger majd ugyis kiosztja automatikusan az új ID-t). Ha csak 1 tábláról lenne szó, akkor nem jelentene túl sok gépelési problémát, de nálam minden táblának van egyedi azonosítója.

    Arról is meggyözhettek persze, hogy kényelmesebb a delphiben megírni az ilyesmit, de egy több felhasználós rendszer esetén ez tünik a legegyszerűbbbnek(legkevesebb kód), leggyorsabbnak(a server végzi a feladatot) és legbiztosabbnak(az ID tuti ID lesz).
    Mutasd a teljes hozzászólást!
  • Arról is meggyözhettek persze, hogy kényelmesebb a delphiben megírni az ilyesmit


    Mondjuk én nem ezt mondtam, hogy kényelmesebb meg jobb Delphiben alapértéket adni, csak az esetben nem fog szólni a Delphi, hogy 'field m1 must have a value' és már a rekord felvitele közben használhatod a mező értékét. Szintén nem fog szólni a Delphi ha a kérdéses mező Field objektumának a "Required" tulajdonságát false-ra állítod (ugyanis minden NOT NULL mezőhöz automatice kapcsolja a Required = true-t), bár ekkor a rekord rögzítése és refreshelése nélkül még nem fogod látni azt a bizonyos default értéket. (Ugyanis a DB csak onnantól kezd tudomást szerezni az új rekordról, ha a Delphiben rögzítetted azt, azaz onnantól töltődnek a default mezők, nomeg a trigger+generátor is akkor érvényesül, úgyhogy valószinüleg ez nem új neked.)

    (Na most kb ugyanazt írtam le, mint az előző postomban)
    Mutasd a teljes hozzászólást!
  • Ha a mező "Required" tulajdonságát false-ra állítom, akkor azzal annyit érek el, hogy a "Field 'm1' must have a value" helyett a "Field Value Required" hibaüzentet kapom.
    Legalábbis a simpledatasetnél ez a helyzet, de ahogy nézem, az IBTable kapomponensnél használható eljárás.
    Csak az a bajom, hogy nem szeretem az ilyen speciális komponenseket, mert mi van, ha áttérek egy másféle adatbázisra???
    Mutasd a teljes hozzászólást!
  • Simpledataset-et nem ismerem, de pl ClientDataSet esetén mind a clientdatasetnél, mind az alapul szolgáló dataset-nél be kell állítani a required = false értéket.
    Mutasd a teljes hozzászólást!
  • Csak az a bajom, hogy nem szeretem az ilyen speciális komponenseket, mert mi van, ha áttérek egy másféle adatbázisra???


    Ez sajnos mindig probléma marad. Elvileg erre való a
    BDE
    . És ott van még
    dbExpress
    stb... de valamilyen szempontból ezek is megkeserítik a fejlesztést. A váltás sosem zökkenőmentes, és ez így még elég derűlátóan is hangzik.
    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