Interbase - początki

0

Do tej pory używałem dbExpress i nie miałem z tym większych problemów. Jednak muszę teraz napisać aplikację używającą Interbase/Firebird. W dbExpress po prostu podpinałem sobie DBGridy, DBEdity itd. pod DataSource i DataSet, wpisywałem odpowiednią komendę SQL do wyciągnięcia danych i wszystko śmigało. Niestety w Interbase DataSet jest tylko read-only i z tego co widzę, to trzeba użyć czegoś takiego jak UpdateObject. Tam muszę zdefiniować zapytania SQL do Delete, Insert, Modify. I mam pytanie - w jaki sposób połączyć te zapytania z polami w DBGrid czy DBEdit? W dbExpress nie musiałem się tym przejmować, bo wszystko robiło się z automatu. A jak tutaj wygląda sprawa? Czy muszę "na piechotę" wypełniać każde pole w parametrach zapytania?

1
Pociech napisał(a):

Do tej pory używałem dbExpress i nie miałem z tym większych problemów. Jednak muszę teraz napisać aplikację używającą Interbase/Firebird. W dbExpress po prostu podpinałem sobie DBGridy, DBEdity itd. pod DataSource i DataSet, wpisywałem odpowiednią komendę SQL do wyciągnięcia danych i wszystko śmigało. Niestety w Interbase DataSet jest tylko read-only i z tego co widzę, to trzeba użyć czegoś takiego jak UpdateObject. Tam muszę zdefiniować zapytania SQL do Delete, Insert, Modify. I mam pytanie - w jaki sposób połączyć te zapytania z polami w DBGrid czy DBEdit? W dbExpress nie musiałem się tym przejmować, bo wszystko robiło się z automatu. A jak tutaj wygląda sprawa? Czy muszę "na piechotę" wypełniać każde pole w parametrach zapytania?

Z helpa:
Bde.DBTables.TUpdateSQL.ModifySQL
[...]
Specifies the SQL UPDATE statement to use when applying an update to a record and cached updates is enabled.

Set ModifySQL to the SQL UPDATE statement to use when applying an updated record to a dataset. Statements can be parameterized queries. To create a UPDATE statement at design time, use the UpdateSQL editor to create statements, such as:

UPDATE "Country.db"
SET Name = :Name, Capital = :Capital, Continent = :Continent
WHERE Name = :OLD_Name

At run time, an application can write a statement directly to this property to set or change the UPDATE statement.

Note: As the example illustrates, ModifySQL supports an extension to normal parameter binding. To retrieve the value of a field as it exists prior to application of cached updates, the field name with 'OLD_'. This is especially useful when doing field comparisons in the WHERE clause of the statement.

Na ile pamiętam - ale nie chce mi się tego instalować, bo żre mi się z innymi komponentami - IBDAC/UNIDAC http://www.devart.com/ibdac/ nie ma takich uwarunkowań (read-only) w prostych zastosowaniach.

1
Pociech napisał(a):

I mam pytanie - w jaki sposób połączyć te zapytania z polami w DBGrid czy DBEdit?

Dokładnie tak samo jak w DBXach.

Pociech napisał(a):

Czy muszę "na piechotę" wypełniać każde pole w parametrach zapytania?

Nie.
W IBQuery wyklikujesz selecta, podłączasz IBUpdateSQL, dwuklik na nim i tu sobie wyklikasz insert, update, delete (właściwie samo się robi)
Można też użyć IBDataSet - takie połączenie IBQuery i IBUpdateSQL.

0

Nie nie wiedziałem w jaki sposób przypisać wartość parametrów w tych poleceniach, ale widzę, że te parametry uzupełniają się same. Dzięki, bardzo mi pomogliście.

Mam jeszcze jedno pytanie. Kiedy wywołuję IBDataSet.Insert za pierwszym razem, włącza się edytowanie aktualnie zaznaczonego rekordu (a powinien zostać wstawiony nowy rekord). Dopiero po kolejnym użyciu Insert działa prawidłowo. Wydaje mi się, że ma to coś wspólnego z ustawianiem focusa. Co tu może być nie tak?

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