Nie mogę uruchomić zapytania SQL

Nie mogę uruchomić zapytania SQL

Wątek przeniesiony 2015-04-05 14:04 z Delphi i Pascal przez flowCRANE.

ŚP
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 10 lat
  • Postów:20
0

W SQL Builderze stworzyłem działające zapytanie:
Skopiowałem je do kodu programu i podczas kompilacji wyrzuca mi komunikat :

Kopiuj
[Error] Unit9.pas(182): Unterminated string
[Error] Unit9.pas(183): ')' expected but identifier 'FROM' found
[Error] Unit9.pas(183): Undeclared identifier: 'DB'
[Error] Unit9.pas(184): Missing operator or semicolon
[Error] Unit9.pas(184): Illegal character in input file: '"' ($22)
[Error] Unit9.pas(184): Undeclared identifier: 'DB'
[Error] Unit9.pas(185): Missing operator or semicolon
[Error] Unit9.pas(185): ':=' expected but '=' found
[Error] Unit9.pas(185): 'END' expected but ')' found
[Error] Unit9.pas(186): Illegal character in input file: '"' ($22)
[Error] Unit9.pas(186): Illegal character in input file: '"' ($22)
[Error] Unit9.pas(188): Unterminated string

Podpowiedzcie jak poprawić poniższy kod by zadziałał.

Kopiuj
     Query_SQL.SQL.Clear   ;
     Query_SQL.SQL.Add
     ('SELECT D.Nr_dnia, D1.Nazwisko, D1.Imie, D2.Godz_powrotu
     FROM "tab_dzien.DB" D
     INNER JOIN "tab_ucznia.DB" D1
     ON  (D1.ID_dnia = D.ID_dnia)
     INNER JOIN "tab_wyjscia.DB" D2
     ON  (D2.ID_ucznia = D1.ID_ucznia)
     ORDER BY D1.Nazwisko, D1.Imie') ;
     Query_SQL.Open ;
edytowany 1x, ostatnio: flowCRANE
spartanPAGE
  • Rejestracja:prawie 12 lat
  • Ostatnio:8 dni
2

W ten sposób nie robi się wieloliniowego tekstu w delphi.

ŚP
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 10 lat
  • Postów:20
0

OK.
A jakaś podpowiedź ?

HI
  • Rejestracja:prawie 13 lat
  • Ostatnio:około 12 godzin
  • Postów:1855
2
ŚP
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 10 lat
  • Postów:20
0

Dzięki !
Zaraz będę próbował.

Poniższe działa jak należy, ale ...

Kopiuj
     Query_SQL.SQL.Clear   ;
     Query_SQL.SQL.Add('SELECT D.Nr_dnia, D1.Nazwisko, D1.Imie, D2.Godz_powrotu') ;
     Query_SQL.SQL.Add('FROM "tab_dzien.DB" D') ;
     Query_SQL.SQL.Add('INNER JOIN "tab_ucznia.DB" D1') ;
     Query_SQL.SQL.Add('ON  (D1.ID_dnia = D.ID_dnia)') ;
     Query_SQL.SQL.Add('INNER JOIN "tab_wyjscia.DB" D2') ;
     Query_SQL.SQL.Add('ON  (D2.ID_ucznia = D1.ID_ucznia)') ;
     Query_SQL.SQL.Add('WHERE D.Nr_dnia = ' + Tdzien);
     Query_SQL.SQL.Add('ORDER BY D1.Nazwisko, D1.Imie') ;
     Query_SQL.Open ;

Chciałbym do WHERE dorzucić jeszcze jeden warunek:

Kopiuj
Query_SQL.SQL.Add('AND  D2.Godz_powrotu = ''); ;

czyli uczeń nie wrócił (brak godziny powrotu)
Kombinuję jak koń pod górę i kicha.

flowCRANE
Edytuj swoje posty zamiast tworzyć nowych, jeśli chcesz coś jeszcze dodać;
spartanPAGE
  • Rejestracja:prawie 12 lat
  • Ostatnio:8 dni
2

Dodaj go konkatując tekst znakiem +, oraz oznacz apostrofy jako znaki specjalne, żeby całość przeszła bez błędu kompilacji

ŚP
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 10 lat
  • Postów:20
0

Dzięki.

ŚP
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 10 lat
  • Postów:20
0

Doczytałem, że aby wstawić '
muszę poprzedzić go backslashem czyli '
Wg tej teorii powinienem zapisać mój problem:

Kopiuj
Query_SQL.SQL.Add('WHERE D.Nr_dnia = ' + Tdzien);
Query_SQL.SQL.Add('AND  D2.Godz_powrotu = ' +  \'\') ;
Query_SQL.SQL.Add('ORDER BY D1.Nazwisko, D1.Imie') ;

... ale niestety działać nie chce !
Wywala błąd:
[Error] Unit9.pas(188): Illegal character in input file: '\' ($5C)
Co robię źle ?

flowCRANE
Podaj link do tego materiału;
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12167
1

Druga linijka nie jest zgodna ze składnią języka; Zwróć uwagę na to, że pierwszy backslash nie jest częścią literału - operatorem też nie jest, więc masz błąd składniowy;

Nie znam się na tych bazach, jednak poniższy przykład przynajmniej będzie poprawny składniowo:

Kopiuj
Query_SQL.SQL.Add('AND  D2.Godz_powrotu = \''');

Ewentualnie posłuż się kodem znaku:

Kopiuj
Query_SQL.SQL.Add('AND  D2.Godz_powrotu = \'#92);

czy tam w heksie:

Kopiuj
Query_SQL.SQL.Add('AND  D2.Godz_powrotu = \'#$5C);

Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
ŚP
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 10 lat
  • Postów:20
0

Dzięki za wszystko.
Pomogło ?
...
Próbuję zostawić bazę danych i nauczyć się jak na komponencie Label umieścić apostrof.
Powinno się to zacząć :

Kopiuj
Label1.Caption :=   /i tu ma być apostrof, a najlepiej dwa

No i niestety nie wiem jak. Brrr.

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Tuchów
  • Postów:12167
0

Przede wszystkim naucz się wstawiać apostrofy do literałów i w ogóle je tworzyć;

Znaku apostrofu nie można wstawić do łańcucha bezpośrednio (podobnie jak w C++ znaku cudzysłowu), bo znaki te są częścią składni języka; Aby dodać do literału pojedynczy apostrof, musisz zapisać dwa pod rząd; Czyli jeśli w etykiecie ma znaleźć się przykładowo ciąg 'pomidor', to musisz zapisać to tak:

Kopiuj
Label1.Caption := '''pomidor''';

Gdzie pierwszy i ostatni apostrof w literale określa początek i koniec wartości, a w miejsca pary początkowej i końcowej zostaną wstawione pojedyncze apostrofy; Pary apostrofów (składniowych) możesz zastąpić pojedynczymi wstawkami z kodem znaku, który jako prefiks musi zawierać znak #:

Kopiuj
Label1.Caption := #92'pomidor'#92; // to samo co #92 + 'pomidor' + #92

Po znaku prefiksu możesz dodać też prefiks systemu liczbowego (w poprzednim przykładzie podałem Ci kod znaku w formacie heksadecymalnym).


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
ŚP
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 10 lat
  • Postów:20
0

Nareszcie !!!

Kopiuj
Query_SQL.SQL.Add('AND  D2.Godz_powrotu = ' + '''''');

i... i działa , sprawdza czy

Kopiuj
D2.Godz_powrotu = '' ;

jest pustym łańcuchem.
Jeszcze raz wszystkim dziękuję.
Las mi pokazaliście, grzyby musiałem sam znaleźć,
ale bez Was dalej szukałbym ich w polu. ;-)
Dzięki raz jeszcze.

flowCRANE
Zakończ wątek, plusując pomocne posty i akceptując jeden z nich;
ŚP
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 10 lat
  • Postów:20
0

Ok.
No cóż uczę się.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)