ADOQuery INSERT Exception

ADOQuery INSERT Exception
2011-09-03T15:56:27+02:00
2011-09-03T22:44:05+02:00
2022-11-22T23:30:42+01:00
jlacika
Sziasztok.

Az lenne a problémám, hogy egy ADOQuery-ben végrehajtott INSERT parancs (a SELECT simán működik) Exception-t generál és már a hajamat tépem.
Próbáltam paraméteresen, próbáltam ADOCommand-dal, ugyanaz.

A hibaüzenet: 0. A sorhalmazban nincsenek definiált oszlopok.

mezo1 string típusú
mezo2 integer típusú

A kód:

AnsiString sg; try { ADOConnection->BeginTrans(); ADOQuery->SQL->Clear(); ADOQuery->SQL->Add("INSERT INTO tabla (mezo1,mezo2)"); ADOQuery->SQL->Add("VALUES ('huhh',1)"); ADOQuery->ExecSQL(); ADOConnection->CommitTrans(); } catch (Exception &exception) { if (ADOConnection->InTransaction) ADOConnection->RollbackTrans(); sg=IntToStr(exception.HelpContext)+". "+exception.Message; Application->MessageBox(sg.c_str()," H I B A",MB_ICONSTOP + MB_OK); }

Az ADOQuery-re írtam OnPostError,OnDeleteError és OnEditError kezelőket, de azok nem aktivizálódnak.

Érdekességképpen, ha a catch ágba a RollbackTrans helyett CommitTrans-t írok, akkor a hiba után még a felírt adat is ott vigyorog a táblában.

Az indokolatlan exception-t mindenképpen el szeretném kerülni, mert egy tranzakcióban több felírásom is lenne.
Ebben kérném a segítségeteket.

Környezet: WinXP SP3, PostgreSQL 9.0, C++ Builder 6.0 de a Delphi példákat is értem valamelyest.
Mutasd a teljes hozzászólást!
ADOQuery->SQL->Add("VALUES ('"huhh"',1)");
Hasonló téma, de delphi-s.
Mutasd a teljes hozzászólást!

  • Az első példád hibás, mert az idézőjel lezárja a stringet.
    A másodikban (a linkben) lévő egyik példát beírtam, azaz idézőjelek közé tettem magát az értéket de ez lett belőle:

    ERROR: syntax error at or near "huhh"
    Line 2: VALUES ("huhhh",0)

    A megoldás ezek szerint, ahogy a linkedet néztem, a ZEOS lenne, bár pont ezt szerettem volna elkerülni. No nem azért, mert hibás vagy ellenszenves, csak plussz installálás a célhelyen.

    Ha nem jön ma más megoldás, akkor azért dobom a pontot.
    Köszönöm azért a fáradozásodat.
    Mutasd a teljes hozzászólást!
  • Ha az adatba teszem a két dupla idézőjelet, most már helyesen , akkor ugyanaz a hibaüzenet, mint a topic indítóban és az adattáblában is megjelenik a két idézőjel.
    Mutasd a teljes hozzászólást!
  • A hibakeresés alatt ne használd a tranzakciókezelést, mivel tapasztalataim alapján a Delphi(CBuilder) ilyenkor elég félrevezető hibaüzenetet ad vissza.

    Szemre minden jónak tűnik, esetleg lehet valamilyen PG specifikus dolog ami kimaradt.
    Mutasd a teljes hozzászólást!
  • Kivettem a tranzakciókezelést és a lefordított exe-t közvetlenül futtattam, nem a fejlesztőből, a helyzet ugyanaz.

    Frissítés:
    Azt elfelejtettem írni, hogy van egy harmadik mező bigserial típusú és ahhoz egy szekvencia van kötve, amit ugye automatikusan kitölt a szerver. Meg is csinálja.
    Mutasd a teljes hozzászólást!
  • A gugli codesearch-ba vésd be:

    ADOQuery->SQL->Add
    Első találatból kiemelés:

    . AnsiString IsCheckMac; if(CheckBox1->Checked) IsCheckMac=EcoderNumber('Y'); else IsCheckMac=EcoderNumber('N'); AnsiString SQLStr="delete from ServerConfigInfo "; SQLStr+="insert into ServerConfigInfo (MaxConnections,MaxUseableDays,CheckMacAddress) VALUES( '"; SQLStr+=MaxConnections+"', '"; SQLStr+=MaxUseableDays+"', '"; SQLStr+=IsCheckMac+"')"; try { ADOQuery->Close(); ADOQuery->SQL->Clear(); ADOQuery->SQL->Add(SQLStr); ADOQuery->ExecSQL(); .
    Egy string-be füz fel mindent..
    Mutasd a teljes hozzászólást!
  • Hát én nem találtam meg ezt a kódrészletet, lehet azért, mert nem tudom hol elérni a "gugli codesearch"-öt?

    Azért behívtam a pgAdmin III-at, azon belül a Query szerkesztőt és belévertem, hogy:

    select * from ServerConfigInfo

    Erre a válasz:
    ERROR: relation "serverconfiginfo" does not exist
    LINE 1: select * from ServerConfigInfo
    ^
    ********** Error **********

    ERROR: relation "serverconfiginfo" does not exist
    SQL state: 42P01
    Character: 15
    Mutasd a teljes hozzászólást!
  • nem tudom hol elérni a "gugli codesearch"-öt

    http://google.com/codesearch

    Egyébként csak az AdoQuery-re koncentráltam, nem a PG-re..

    De kereshetsz rá:

    ADOQuery +postgresql

    bár mind .pas lesz.
    Mutasd a teljes hozzászólást!
  • Na megtaláltam. Köszi, ezt nem ismertem.

    A példában:
    configString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=";

    Ez nekem sima SQL szerverre utal, azért nem ismeri ezeket a "változókat', amik a példádban vannak.

    Az enyém:

    ConnectString="Provider=PostgreSQL OLE DB Provider;Password=*****;User ID=postgres;Data Source=localhost;Location=postgres;Extended Properties="""; Provider="PostgreSQL OLE DB Provider";
    A csillag helyén értelemszerűen a jó Password van.


    Szerk: Most látom bővítettél, köszi nézem.
    Mutasd a teljes hozzászólást!
  • Áhhh, nem sportolok vele tovább, így is két napom elment vele.
    A codesearch az "ADOQuery->SQL->Add + postgresql"-re nem is hoz találatot C++ - ban. Lehet, hogy nem véletlen.
    Akkor most maradok a ZEOS-nál, az bevált.

    Köszönöm Riha a fáradozásodat, ment a pont.

    Ha később mégis találok valamit, ideírom.
    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