InterBase i Delphi 7 - jakiś błąd

0

Witam wszystkich serdecznie.
Kilka dni temu postanowiłem pobawić się bazami danych. Wybór padł na InterBase. Podczas szukania różnych pomocy na temat SQLa itp... natknąłem się na artykuł "InterBase i Delphi 7 - programowanie baz danych" (http://4programmers.net/article.php?id=587) Po zastosowaniu sie szczegółowo do wszystkich wskazówek napisałem omawiany tam program. Po skompilowaniu zobaczyłem piękną bazę danych. Jednak podczas próby dodania danych do bazy, pojawia się komunikat:

Project Project1.exe raised exception class EConvertError with message ` is not a valid integer value'. Process stopped. Use Step or Run to continue.

Gdy dodam jakiś wpis za pomocą np. IBConsole to po skompilowaniu widać ten wpis jako pierwszy wiersz, a przy próbie dodania kolejnego już za pomocą programu otrzymujemy komunikat:

Project Project1.exe raised exception class EIBInterBaseError with message 'Dynamic SQL Error SQL error code = -104 Token unknown - line 1, char 85 \'. Process stopped. Use Step or Run to continue.

oraz

Dynamic SQL Error SQL error code = -104 Token unknown - line 1, char 85 \.

z kolei próby usunięcia wpisu dają efekt w postaci komunikatu:

Project Project1.exe raised exception class EIBInterBaseError with message 'Dynamic SQL Error SQL error code = -104 Token unknown - line 1, char 40 ;'. Process stopped. Use Step or Run to continue.

oraz

Dynamic SQL Error SQL error code = -104 Token unknown - line 1, char 40 ;.

Jaka jest tego przyczyna... Nie wiem. Niestety nie znalazłem na to pytanie odpowiedzi ani na google, ani na 4programmers, ani w żadnej książce dotyczącej SQLa i InterBase. Nie wiem czy problem dotyczy połączenia z serverem (lokalnym), czy może jest jakiś błąd w składni...
Niestety w tej tematyce jestem zielony jak szczypiorek na wiosnę. Może Wy spotkaliście się z podobnym problemem. Może sam autor artykułu coś wie na ten temat... Ja już po 3 dniach męczarni opadłem z sił.
POMOCY!!!! [???]
Korzystam z Delphi7 Enterprise i InterBase6 (wszystko jest na moim komputerze - bez żadnego łączenia się z serwerami zewnętrznymi)

0

Kod -104 w tym przypadku oznacza nieprawidlowa skladnie samego polecenia SQL.

Sprawdz czy wszystkie stringi jakie dodajesz opatrzone sa pojedynczymi ciapkami czyli znakami '. Pamietaj tylko ze dodajac do bazy nie zrobisz tego co ponizej...

IBQuery.SQL.Add('indert into tabela values (1,'jakis string')');

To oczywiscie proba wpisania wartosci na sztywno :) . Wystapi blad kompilacji znaku ' w stringu.

Napisz dokladnie jakie masz kolumny, jakiego typu oraz wypisz jaka instrukcje chcesz wykonac poprzez IBQuery, a mam nadzieje ze pomoge.

0

Witam.
Ja również napisałem bazę na podstawie tego artykułu i mam ten sam problem jak kolega. Dokładnie te same błędy mi się pokazują. W jaki sposób rozwiązać ten problem ?

0

A może w ten sposób:

Query1.SQL.Add('INSERT INTO tabela (pole1,pole2,pole3) VALUES (:param1,:param2,:param3)');

Query1.ParamByName('param1').AsString:=edit1.text;
Query1.ParamByName('param2').AsString:=edit2.text;
Query1.ParamByName('param3').AsString:=edit3.text;

nie musisz się bawić w "ciapki" :)

0

Tworząc ten artykuł myślałem, ze przynajmniej niektóre rzeczy są jasne:

Błąd
Project Project1.exe raised exception class EConvertError with message ` is not a valid integer value'. Process stopped. Use Step or Run to continue.
pojawia się, gdy użytkownik uruchamia aplikację z poziomu Delphi w bazie nie ma żadnych wpisów - ta instrukcja jest w try except - czyli normalne, że program trzeba uruchomić poza środowiskiem Delphi - czyli skompilowac, zamknąć Delphi kliknąć dwa razy na ikonkę pliku exe:) i dopiero robić jakieś wpisy

Druga sprawa jeśli zrobicie dokładnie krok po kroku te programy i stworzycie identyczną bazę jak ja w artykule to na pewno będzie działać - tylko uwaga uruchamiać te programy poza środowiskiem Delphi

Kolejna sprawa z błędem -104 posprawdzajcie apostrofy - ja wyświetliłbym sobie treść zapytania przed wykonaniem za pomocą instrukcji showmessage i taka instrukcje spróbował wpisać w IBConsole - wtedy można zobaczyć jaki błąd sie popełnia

0

nie wiem czy temat aktualny ale własnie "przerabiam to samo" na econvert error" :-)

w var
dodać dwie zmienne :
poz_temp: string;
pozycja: integer;

a tu fragment kodu z mojego softu

poz_temp:=pzapytanieSelect('SELECT MAX(ID) as ID FROM '+ED_NAZWA.text+';',F_ADDZAM.IBQUERY,F_ADDZAM.IBTRANZ,F_ADDZAM.IBDBA,'ID');
if Length(poz_temp)>0 then
begin
pozycja:=StrToInt(poz_temp);
Inc(pozycja);
end else
begin
pozycja:=1;
end;

MOja rada na reszte problemów ... trzeba odejść od "wodotrysków" Borlanda a zejść troszke do programowania ... wtenczas wszystko zadziała

0

Aha co jeszcze ten kod dotyczy wyszukiwania klucza głownego oznaczjącego nr. wiersza w tym artykule zmienna klucz_glowny (czy jakoś tak) ujęta w try z charakterystyczną konstrukcją do econvert error

0

co do drugiego typu błędów "token unkown" nie wiem dokładnie ale kojarzy mi się to z złąskładni SQL w zapytaniu

Osobiście robie tak że zawsze wyświetlam gotową składnie np za pomocą showmodal i sie patrze czy nie zachodzi np. taka sytuacja po wygenrowaniu skladni z editów itd ... np. :

SELECT *FROMTABELA

czy też

INSERT TABELA VALUES (wartości)

To są chyba te błędy z jak to określe = tokenami</delphi>

1 użytkowników online, w tym zalogowanych: 0, gości: 1