Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];

Вниз

Правильное соединение с БД Interbase?   Найти похожие ветки 

 
supersan   (2003-04-09 08:37) [0]

Господа, здравствуйте! Может, кто подскажет правильное соединение с БД Interbase? Я обычно делаю так (через стандартные компоненты): TIBDatabase (с БД), TIBTransactionTIBDatabase, хотя зачем это, не знаю :-)), TIBTable (с TIBDatabase, выбирая конкретную табличку, добавляю все поля через Add All Fields), TDataSourse (с TIBTable), далее TDBGrid и т.д. В результате приходится еще добавлять TIBQuery, где ручками пишу все SQL (на Insert, Update, Delete). Остальные компоненты на закладке Interbase не использую. Нет ли более правильного соединения, где бы не пришлось бы писать все ручками, а использовать стандартные средства для модификации таблицы, предоставляемые TDBGrid и TDBNavigator? Спасибо за внимание, заранее благодарен. Если подскажете, где порядок соединения можно найти в Сети, то тоже нормально. Поля в таблицах разных типов, графику не использую.


 
Alexandr   (2003-04-09 08:51) [1]

TIBdataSet


 
Zacho   (2003-04-09 08:53) [2]


> supersan (09.04.03 08:37)
> TIBDatabase (с БД), TIBTransaction (с TIBDatabase, хотя
> зачем это, не знаю :-))

Что зачем не знаешь ? Если не знаешь, зачем TIBTransaction, то читай какую-нибудь литературу по RDBMS и статьи о транзакциях в IB на http://www.ibase.ru

> В результате приходится еще добавлять TIBQuery, где ручками
> пишу все SQL (на Insert, Update, Delete).

В результате чего ?


> Нет ли более правильного соединения, где бы не пришлось
> бы писать все ручками, а использовать стандартные средства
> для модификации таблицы, предоставляемые TDBGrid и TDBNavigator?
>

"Не писать все ручками" получится только в простейших случаях. "Средства для модификации таблицы" предоставляет не TDBGrid и т.п. а связанный с ним TDataSet (IBTable,IBQuery,IBDataSet). Если тебе нужно выбирать на клиента все записи одной таблицы - используй TIBTable. Правда, в клиент-серверных приложениях это довольно редкий случай. Для запросов сложнее чем SELECT ... FROM ... используй TIBQuery или TIBDataSet. В некотрых случаях использование TIBQuery - проще, но TIBDataSet - универсальнее.
И что такое в твоем понимании порядок соединения ? Соединения чего ?
И почитай хорошенько хелп по IBX чтобы понимать какие компоненты для чего и чем отличается TIBTable, TIBQuery, TIBDataSet.
Еще советую хорошенько изучить сайт http://www.ibase.ru , особенно http://www.ibase.ru/develop.htm


 
Карелин Артем   (2003-04-09 08:54) [3]

>TIBTable (с TIBDatabase, выбирая конкретную табличку, добавляю все поля через Add All Fields)
Зачем добавлять все поля?? Достаточно просто не делать это :)
И TIBTable советую заменить на TIBQuery с запросом типа Select.
Так все нормально, вот только связав TIBQuery и TIBUpdateSQL можно получить "живой" запрос (прописав необходимые параметризированные запросы в соотв. свойствах TIBUpdateSQL).


 
El   (2003-04-09 09:01) [4]

Для модификации таблицы существует компонент TIBUpdateSQL
Его связываешь с TIBTable через св-во UpdateObject
В окне редактора TIBUpdateSQL делаешь GenerateSQL и не придется писать все ручками.
Или используй TIBDataSet вместо пары TIBTable и TIBUpdateSQL
A еще лучше переходи на компоненты FIBPlus.


 
supersan   (2003-04-09 09:34) [5]

Удалено модератором


 
Соловьев   (2003-04-09 09:50) [6]


> где поставить TEdit"ы, а потом в параметры SQL передавать
> набранные пользователем значения. Так?

А зачем тебе DBEdit?


 
supersan   (2003-04-09 09:56) [7]

Да, кстати, никто, случайно, не знает паролей для установки InfoPower4000Pro или 1stclass3000Pro? Говорят, тоже хорошая штука, я видел проект, где они определенным образом настраиваются, тогда можно модификацию таблицы проводить в Gride и Navigatore (прям как в БД Paradox). К сожалению, проект был на Delphi3, а нужно Delphi5


 
Zacho   (2003-04-09 10:00) [8]

И без всяких сторонних компонентов можно проводить модификацию таблиц в TDBGrid. Почитай какую-либо литературу по работе с БД в Дельфи.


 
Соловьев   (2003-04-09 10:05) [9]


> модификацию таблицы проводить в Gride и Navigatore (прям
> как в БД Paradox

Не ври, такого не бывает. Грид только отображает данные, а навигатор только переводит НД в режимы: редактирование и т.д.


 
Elvira   (2003-04-09 10:16) [10]

А не пойму ты модификацию делаешь в DBGrid или в форме ввода в DBEdit.
В прочем и в том и в другом случае просто связываешь DBEdit или столбцы DBGrid с полями таблицы(как обычно). При модификации таблицы пишешь IBTable.Insert(Edit)... ну ты понял.
Или если пользуешься Navigatore и того не надо.
Все остальное TIBUpdateSQL сделает за тебя.

А FIBPlus помоему есть здесь http://www.ibase.ru


 
supersan   (2003-04-09 17:00) [11]

Наконец-то добрался. Отвечаю на замечания

> Соловьев © (09.04.03 10:05)

> Не ври, такого не бывает. Грид только отображает данные,
> а навигатор только переводит НД в режимы: редактирование
> и т.д.

Я имел в виду, что при нажатии кнопки Insert в TNavigator можно добавить запись в TGrid, а потом запостить нажатием на кнопку Post. Я же этого и хочу добиться. Причем в некоторых таблицах это получается (с полями типа Integer и Varchar), а в других - нет (поля Numeric и Date). Почему так?

> Elvira (09.04.03 10:16)
> А не пойму ты модификацию делаешь в DBGrid или в форме ввода
> в DBEdit.
> В прочем и в том и в другом случае просто связываешь DBEdit
> или столбцы DBGrid с полями таблицы(как обычно). При модификации
> таблицы пишешь IBTable.Insert(Edit)... ну ты понял.
> Или если пользуешься Navigatore и того не надо.
> Все остальное TIBUpdateSQL сделает за тебя.
>
> А FIBPlus помоему есть здесь http://www.ibase.ru

Хочу сделать в TGrid, TIBUpdateSQL использовал, сгенерил SQL для вставки и т.п., а оно за меня не делает. Может, что еще не учел?
FIBPlus там действительно есть, но для D3 (freeware). Для D5 их установить не удалось :-(


 
supersan   (2003-04-09 17:08) [12]


> Elvira (09.04.03 10:16)

PS Вот, буквально сейчас попробовал добавить запись. Выдает какое-то непереваримое "Project *** raised exception class EIBInterBaseError with message "Dynamic SQL Error SQL error code=-804 Incoorect values within SQLDA structure" и т.д."
Что это за оно такое, не знаете?


 
Соловьев   (2003-04-09 17:09) [13]


> Хочу сделать в TGrid, TIBUpdateSQL использовал, сгенерил
> SQL для вставки и т.п., а оно за меня не делает. Может,
> что еще не учел?

IBDataSet - там все легко.


> с полями типа Integer и Varchar), а в других - нет (поля
> Numeric и Date). Почему так?

хоть ошибки выдает?


 
supersan   (2003-04-09 17:18) [14]


> Соловьев © (09.04.03 17:09)
> IBDataSet - там все легко.

А как его со всеми правильно соединить?

> хоть ошибки выдает?

Выдает (см пред мое замечание)


 
Zacho   (2003-04-09 17:24) [15]

Ну а что "оно" за тебя должно делать ? Почитай книжки какие-нибудь, чтобы понимать как работать в Дельфи с ДБ. Без элементарных знаний никие FIBPlus не помогут.
В общем, простой пример.
Пусть в БД есть таблица MY_TABLE. В ней есть поля ID (первичный ключ) и SOME_FIELD (какое-то еще поле). Для простоты предположим, что ID заполняется генератором при вставке записи (например в событии OnNewRecord или с помощью свойства GeneratorField) из приложения и редактироваться не может. Для доступа к таблице будем использовать TIBDataSet c иминем IBDataSet. (естественно, должны быть еще TIBDataBase и TIBTransaction). Тогда:
1. Ложим на форму TDataSource. В свойстве DataSet указываем IBDataSet.
2. В свойстве DataSource DBGrid"a указываем этот DataSource.
3. В св-ве SelectSQL у IBDataSet пишем SELECT * FROM MY_TABLE
4. В ModifySQL - UPDATE MY_TABLE SET SOME_FIELD=:SOME_FIELD WHERE ID=:ID
5. В InsertSQL - INSERT INTO MY_TABLE (ID,SOME_FIELD) VALUES (:ID,:SOME_FIELD)
6. В DeleteSQL - DELETE FROM MY_TABLE WHERE ID=:ID
И все работает.


 
Johnmen   (2003-04-09 17:34) [16]

SQLDA - SQL descriptor area
Далее можно привести что, зачем и почему...
Да только в соответствующем .hlp все достаточно разжевано...


 
supersan   (2003-04-09 17:38) [17]


> Zacho © (09.04.03 17:24)

Попробовал так. При попытке открытия выдает ошибку: "SQL Parse Error: Parameter name expected" Извините, если кажусь глупым, но ведь если бы все шло как задумано, то и вопроса бы не возникло...


 
supersan   (2003-04-09 17:40) [18]


> Johnmen © (09.04.03 17:34)

В каком именно, извините? И как от такого избавиться? Плиз...


 
Соловьев   (2003-04-09 17:40) [19]

что в selectSQL написано?


 
Zacho   (2003-04-09 17:42) [20]

Приведи SelectSQL, ModifySQL,InsertSQL,DeleteSQL и структуру таблицы.
Тогда что-нибудь можно будет сказать.


 
Johnmen   (2003-04-09 17:54) [21]

Читать, вникать и т.д. ibx.hlp или fibplushelp.hlp
(лучше хелпов объяснить трудно и долго)
Избавление одно - не делать ошибок...:)


 
supersan   (2003-04-09 18:26) [22]


> Zacho © (09.04.03 17:42)
> Приведи SelectSQL, ModifySQL,InsertSQL,DeleteSQL и структуру
> таблицы.
> Тогда что-нибудь можно будет сказать.

Выполняю.База:
/* Domains */
CREATE DOMAIN T_ID AS
INTEGER
NOT NULL;
CREATE DOMAIN T_DATE AS
DATE
NOT NULL;
CREATE DOMAIN T_MONEY AS
NUMERIC(9,2)
NOT NULL;
CREATE DOMAIN T_DELETED AS
CHAR(1)
DEFAULT "0"
COLLATE PXW_CYRL;

/* Tables */
CREATE TABLE SPMINPENS (
ID T_ID,
MONEY T_MONEY,
DATE_MP T_DATE,
DELETED T_DELETED COLLATE PXW_CYRL
);

На ID стоит генератор (его нужно?)
В Delphi5 (!)
TIBDatabase + TIBTransaction + TIBDataset + TDatasource + (TGrid + TNavigator)
В TIBDataset:
InsertSQL.Strings = ("INSERT INTO SPMINPENS (Money, Date_MP)
VALUES (:Money,: Date_MP)")
SelectSQL.Strings = ("select ID, MONEY, DATE_MP, DELETED from
SPMINPENS")
ModifySQL.Strings = ("UPDATE SPMINPENS SET (Money=:MONEY,
Date_MP=:DATE_MP) WHERE ID=:" +"ID")

(скопировал из файла dfm)
DeleteSQL пока не делал, т.к. надо при удалении не физически удалить, а присвоить полю Deleted значение "1"
Что-нибудь еще нужно?


 
Zacho   (2003-04-09 18:44) [23]

Во-первых что такое "На ID стоит генератор " ?
Во-вторых InsertSQL должен быть таким INSERT INTO SPMINPENS (ID,MONEY,DATE_MP) VALUES (:ID,:MONEY,:DATE_MP)
В-третьих ModifySQL - UPDATE SPMINPENS SET MONEY=:MONEY, DATE_MP=:DATE_MP WHERE ID=:ID
И без всяких скобок и "+"


 
supersan   (2003-04-10 06:45) [24]


> Zacho © (09.04.03 18:44)
> Во-первых что такое "На ID стоит генератор " ?
> Во-вторых InsertSQL должен быть таким INSERT INTO SPMINPENS
> (ID,MONEY,DATE_MP) VALUES (:ID,:MONEY,:DATE_MP)
> В-третьих ModifySQL - UPDATE SPMINPENS SET MONEY=:MONEY,
> DATE_MP=:DATE_MP WHERE ID=:ID
> И без всяких скобок и "+"

Ага, спасибо. Только следующее.
1. На ID генератор - это значит, что есть
CREATE GENERATOR GEN_SPMINPENS_ID;
SET GENERATOR GEN_SPMINPENS_ID TO 0;

При добавлении стоит триггер, он автоинкрементит это поле. Остальные таблицы при такой же конструкции работают.
2. InsertSQL и ModifySQL исправил. В ModifySQL я "+" не ставил, это Delphi постаралась
3. Все равно данная TIBDataset не открывается. При попытке сделать ее активной выдается ошибка (повторю ее текст):
"SQL Parse Error: Parameter name expected"
Это что за зверь? Насчет SelectSQL нет замечаний (см. )
> supersan (09.04.03 18:26)
?


 
supersan   (2003-04-10 09:01) [25]

Ничего, что я так рано? У нас просто день уже. Никто не может мне помочь?


 
Соловьев   (2003-04-10 10:05) [26]


> . В ModifySQL я "+" не ставил, это Delphi постаралась

такого не может быть.


> "SQL Parse Error: Parameter name expected"
> Это что за зверь? Насчет SelectSQL нет замечаний (см.

оставь только SelectSQL.Проверь. Потом добавь InsertSQL. Проверь. И т.д. Выясни в каком у тебя ошибка.


 
supersan   (2003-04-10 10:38) [27]

ОК, с открытием и с "+" разобрался. Теперь при открытии формы, несмотря на то, что данная IDDataset активна, ни TGrid ни TNavigator не активны. Впечатление такое, что они связаны с закрытым НД. А это почему такая бяка? Или с IDDataset это нормально? Тогда как заактивизировать Grid и Navigator?


 
supersan   (2003-04-10 10:55) [28]

Sorry, сам накосячил - неправильно подсоединил :-( Исправил. Теперь при добавлении выдает ошибку "Field ID must have a value". А это поле - автоинкрементное. Если пытаться добавить запись в WISQL, то генерится ID корректно. В компонентах типа IBTable я устанавливал св-во Required столбца ID в False, тогда поле заполнялось автоматом. А тут как?
Еще раз прошу прощения за предыдущий ляпсус


 
Соловьев   (2003-04-10 11:06) [29]

property GeneratorField: TIBGeneratorField;


 
supersan   (2003-04-10 11:17) [30]

Товарищи мои дорогие!
Пожалуйста, кто знает, что такое "Dynamic SQL Error SQL error code = -804 Incorect values within SQLDA structure", возникает при попытке добавления/изменение таблицы SPMINPENS (описание см. выше) > supersan (09.04.03 18:26), а, главное, как от него избавиться и заполнить-таки таблицу эту!!!
На www.ibase.ru я что-то такое не нашел...
PS Пытаюсь, переведя IBDataset в режим Insert, ввести следующие значения: в поля MONEY и DATE_MP соответственно 200 и 01.01.2001


 
supersan   (2003-04-10 11:22) [31]


> Соловьев © (10.04.03 11:06)
> property GeneratorField: TIBGeneratorField;

Это где ж такое свойство? В IBDataset нет, по крайней мере, при <Ctrl>+<Space> его не показывает. Да я нашел, что есть аналогичное (т.е. Required) св-во, его тоже в False - и все ОК. Так что с этим справился. Только остается ошибка (см. пред.)


 
Соловьев   (2003-04-10 11:26) [32]


> при <Ctrl>+<Space> его не показывает

при это много чего не показывает, например FieldByName? поэтому же не стоит судить что этого свойства нет. Оно есть например в Object Inspector.


 
supersan   (2003-04-10 11:34) [33]


> Оно есть например в Object Inspector.

Ну нет его в Object Inspector. Есть что-то похожее, property AutoGenerateValue, его можно установить, в частности, в arAutoInc. Ну это шут с ним. Как насчет ошибки ( > supersan (10.04.03 11:17))?


 
Соловьев   (2003-04-10 11:38) [34]

Оттестируй свой запрос на изменение в IBConcol, там и найдешь свою ошибку.


 
supersan   (2003-04-10 12:23) [35]


> Соловьев © (10.04.03 11:38)
> Оттестируй свой запрос на изменение в IBConcol, там и найдешь
> свою ошибку.

Извините, не совсем понял, что имеется в виду. Если имеется в виду TDBGrid, то непонятно, как там тестировать. Если имеется в виду правильность составления SQL, то, повторяю, в WISQL подобный запрос проходит бех проблем
Пример. В WISQL запрос
insert into spminpens (MONEY, DATE_MP) values (100,"01.01.2001")
Результат:
select * from spminpens

ID MONEY DATE_MP DELETED
=========== =========== =========== =======

1 100.00 1-JAN-2001 0

В Delphi
IBDataset.InsertSQL:
INSERT INTO SPMINPENS (ID,MONEY,DATE_MP) VALUES (:ID,:MONEY,:DATE_MP)
В TGrid вывожу поля MONEY и DATE_MP, заполняю при добавлении значениями 100 и 01.01.2001 соответственно. Выдается ошибка.
Что не так делаю?


 
AlexSerp   (2003-04-10 13:06) [36]

Выбрось из вставки ID.


 
supersan   (2003-04-10 13:21) [37]


> AlexSerp © (10.04.03 13:06)
> Выбрось из вставки ID

Ну сделал, попробовал - все равно фигня (извиняюсь), т.е. та же ошибка. Не в ID дело, как мне кажется, а в том, что, возможно, Interbase неправильно воспринимает заполнение поля типа DATE и/или NUMERIC. Может, с ними надо что-то сделать? Если да, то на что обратить внимание? Елки-палки, неужели только у меня такое дело встретилось? Если у кого получалось заполнение полей типа DATE и/или NUMERIC, опишите соединение компонентов, плиз, и их настройку, тоже плиз. Желательно, если будут только стандартные Дельфовские компоненты, можно из Rx Library. Если нужны какие еще, то подскажите, где взять ( для Delphi 5) и кряки к ним(плиз сто раз). А то, может, вышлите на supersanpovt@mail.ru? Ну господа, вторые сутки бьемся над энтим делом, нешто столь времени нужно на простое (по идее) дело? И большая просьба: может перед подачей совета прочитаете историю переговоров? Там уже много советовали...


 
AlexSerp   (2003-04-10 13:45) [38]

Посмотри еще региональные настройки на десятичный разделитель и формат даты в системе.


 
Соловьев   (2003-04-10 13:55) [39]


> :
> INSERT INTO SPMINPENS (ID,MONEY,DATE_MP) VALUES (:ID,:MONEY,:DATE_MP)

может поробовать привести к формату дату? CAST(... as TimeStamp)


 
supersan   (2003-04-10 14:11) [40]


> Соловьев © (10.04.03 13:55)
> может поробовать привести к формату дату? CAST(... as TimeStamp)

НА ДАТУ ОН КАК РАЗ НЕ РУГАЕТСЯ. Счас попробовал создать две таблички, одна - с DATE, другая - с NUMERIC. Первая заполняется без проблем, причем даже с TIBTable. Вторая и выдает энту самую пресловутую ошибку.


> AlexSerp © (10.04.03 13:45)
> Посмотри еще региональные настройки на десятичный разделитель
> и формат даты в системе

В том-то и дело, что я ввожу число БЕЗ десятичной точки (пока, но потом буду с ней)

Итак, дело в NUMERIC. Будут какие-нибудь соображения на этот счет?


 
Соловьев   (2003-04-10 14:26) [41]

CAST(... as float) или (numeric(9,2))


 
AlexSerp   (2003-04-10 14:31) [42]

А точно нужно NUMERIC(9,2)?
Может просто DOUBLE PRECISION испоьзовать?
У меня с ним никогда проблем не возникало.


 
supersan   (2003-04-10 14:45) [43]


> Соловьев © (10.04.03 14:26)
> CAST(... as float) или (numeric(9,2))

Извините, не совсем понял. Куда такую конструкцию вставить? Нельзя ли чуть-чуть поподробнее? Если имелось в виду, что надо использовать TIBDataset.InsertSQL:="INSERT INTO SPMONEY (MONEY) VALUES (:MONEY)" и туда вставить CAST. Так не получается, при открытии IBDataset выдается ошибка
PS Описание таблицы следующее
CREATE DOMAIN T_DELETED AS
CHAR(1)
DEFAULT "0"
COLLATE PXW_CYRL;

CREATE DOMAIN T_ID AS
INTEGER
NOT NULL;

CREATE DOMAIN T_MONEY AS
NUMERIC(9,2)
NOT NULL;


CREATE GENERATOR GEN_SPDATE_ID;
SET GENERATOR GEN_SPDATE_ID TO 0;


CREATE TABLE SPMONEY (
ID T_ID NOT NULL,
MONEY T_MONEY,
DELETED T_DELETED COLLATE PXW_CYRL
);









 
supersan   (2003-04-10 14:46) [44]


> AlexSerp © (10.04.03 14:31)
> А точно нужно NUMERIC(9,2)?
> Может просто DOUBLE PRECISION испоьзовать?
> У меня с ним никогда проблем не возникало.

В смысле, поле с таким типом? Счас попробую


 
Соловьев   (2003-04-10 14:49) [45]

TIBDataset.InsertSQL:="INSERT INTO SPMONEY (MONEY) VALUES (cast(:MONEY) as float)


 
supersan   (2003-04-10 14:53) [46]


> Соловьев © (10.04.03 14:49)
> TIBDataset.InsertSQL:="INSERT INTO SPMONEY (MONEY) VALUES
> (cast(:MONEY) as float)

Так он ругается на Cast
ГОСПОДА, СПАСИБО!!! ПОМОГЛО DOUBLE PRECISION ПОЛЕ. ЗАПОЛНЯЕТ БЕЗ ПРОБЛЕМ, И С ТОЧКОЙ И БЕЗ ОНОЙ!!! И ДАЖЕ С ИСПОЛЬЗОВАНИЕМ TIBTable. СПАСИБО ВСЕМ, КТО ПРИНЯЛ УЧАСТИЕ В ОБСУЖДЕНИИ!!!


 
AlexSerp   (2003-04-10 14:56) [47]

Заходите еще!
Приятно, когда находится выход. ;-)


 
Johnmen   (2003-04-10 14:59) [48]

Ну слава Аллаху ! Закончилось on-line обучение азам. :)
Хотя странно, почему автор так упорно не желает читать документацию...Поскольку приведенный кусок supersan © (10.04.03 14:45) явно отдает непониманием...



 
supersan   (2003-04-10 15:49) [49]


> AlexSerp © (10.04.03 14:56)
> Заходите еще!

Зайдем обязательно. Видите, даже ник зарегистрировал :-)

> Johnmen © (10.04.03 14:59)
> Ну слава Аллаху ! Закончилось on-line обучение азам. :)
> Хотя странно, почему автор так упорно не желает читать документацию...Поскольку
> приведенный кусок supersan © (10.04.03 14:45) явно отдает
> непониманием...

Дак ведь сюда и приходят, чтоб чему-нибудь научиться, чего сами не знают, или не так?
Про документацию я выяснял, получил ответ

> Johnmen © (09.04.03 17:54)
> Читать, вникать и т.д. ibx.hlp или fibplushelp.hlp

Ну нет у меня на компе перечисленных файлов :-(, так и не понял, почему...
Еще раз спасибо, что помогли, если что, обращайтесь ;-)



Страницы: 1 2 вся ветка

Форум: "Базы";
Текущий архив: 2003.04.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.009 c
1-91396
Тфьу
2003-04-15 10:53
2003.04.28
Поменять яркость.


7-91574
Rammst
2003-03-10 09:01
2003.04.28
CD-ROM


3-91168
TempAlly
2003-04-09 14:18
2003.04.28
Date-константа в TQuery.Filter


1-91391
Jam
2003-04-16 10:18
2003.04.28
Слияние файлов


1-91351
Andr_Volk
2003-04-16 05:43
2003.04.28
удалить из файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский