Вопрос № 50840: Здравствуйте уважаемые эксперты!
У меня такой вопрос: есть БД с 2-мя таблицами: 1-я таблица(PLACES) содержит 2 поля: PlaceID(integer, уникальное) и PlaceName(varchar).
2-я таблица(CARS) содержит поля CarID(integer, уникальное), PlaceID(i...Вопрос № 50869: Здравствуйте!
Пытаюсь радактировать DBFник:
if MessageDlg('Удалить запись?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
form1.Query1.Delete;
а он мне Table is read only, хотя везде сотит Read only False.
Понятно, что на...Вопрос № 50892: У меня в таблице БД MySQL русские буквы отображаются в виде знаков вопроса. Это в phpMyAdmin. Когда я с помощью php вытаскиваю это дело, скажем, в , отображаются точно такие же знаки вопроса.
Как мне изменить кодировку на виндовую (windows-1...
Вопрос № 50.840
Здравствуйте уважаемые эксперты!
У меня такой вопрос: есть БД с 2-мя таблицами: 1-я таблица(PLACES) содержит 2 поля: PlaceID(integer, уникальное) и PlaceName(varchar).
2-я таблица(CARS) содержит поля CarID(integer, уникальное), PlaceID(integer), CarName(varchar). Можно ли создать такой SQL-запрос, который
вернет набор данных вида (<PlaceName>, <Число_записей_из_таблицы_Cars_где_Cars.PlaceID=Places.PlaceID>) для ВСЕХ записей таблицы Places.
То есть, для КАЖДОГО места(PlaceName) выводилось бы число машин, которые там находятся.
Причем, хотелось бы, чтобы это была хранимая процедура или представление, так как хочется максимально вынести логику из приложения и
взвалить ее на сервер БД (Firebird 1.5.3).
Отвечает: Козлов Алексей Сергеевич
Здравствуйте, Балашов Григорий!
Я не знаю как сделать хранимую процедуру или представление, а SQL-запрос такой:
SELECT Place.Name, COUNT(Car.ID) FROM places, cars WHERE Cars.PlaceID=Place.PlaceID GROUP BY Place.PlaceName
--------- Версий еще много будет, пока есть фантазия...
Ответ отправил: Козлов Алексей Сергеевич (статус: 3-ий класс)
Ответ отправлен: 02.08.2006, 07:22 Оценка за ответ: 5 Комментарий оценки: Спасибо, так и есть!
Отвечает: Александр Шевченко
Здравствуйте, Балашов Григорий!
С созданием хранимой процедуры или представления помочь не могу, так как с Firebird не работал, а запрос будет такой:
select places.PlaceName, count(cars.carname) as CarsCount from places inner join cars on places.placeid=cars.placeid group by places.placename
--------- Вместо внутренней почты лучше стучитесь в аську
Ответ отправил: Александр Шевченко (статус: Студент)
Ответ отправлен: 02.08.2006, 09:01 Оценка за ответ: 5 Комментарий оценки: Все правильно, спасибо!
На мой взгляд хранимая процедура тут не совсем уместна,
а представление создается так: (см. приложение)
Представление называется v_places_cars (имя может быть любым другим)
Работать с им можно как с обычной талицей: select id,name,cars from v_places_cars
Также я добавил в представление еще и поле placeid поскольку оня явно может пригодиться.
Приложение:
Ответ отправил: LastSoul (статус: 8-ой класс)
Ответ отправлен: 02.08.2006, 14:00 Оценка за ответ: 5 Комментарий оценки: Спасибо большое. Все так, как и надо...
Вопрос № 50.869
Здравствуйте!
Пытаюсь радактировать DBFник:
if MessageDlg('Удалить запись?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
form1.Query1.Delete;
а он мне Table is read only, хотя везде сотит Read only False.
Понятно, что надо работать через TTable, а возможно ли работа через Query и как если возможно?
Отправлен: 02.08.2006, 09:03
Вопрос задал: KuchumHan (статус: Студент)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Shcherbakov Anton
Здравствуйте, KuchumHan!
если вы используете Query то чтовам мешает выполнить запрос
query.close;
query.sql.clear;
query.sql.add("delete from Table where Поле=условие");
query.open;
Ответ отправил: Shcherbakov Anton (статус: 3-ий класс)
Ответ отправлен: 02.08.2006, 09:28
Отвечает: Проходящий Мимо
Здравствуйте, KuchumHan!
Можно и через Query1, если сделать следующее:
form1.Query1.Close;
form1.Query1.SQL.Clear;
form1.Query1.SQL.Add('delete from table where id_table>50');
form1.Query1.ExecSQL;
Для операций удаления или выполнения процедур нужно использовать метод ExecSQL, для выборки - Open;
Здесь будут удалены все записи, если значение поля id_table таблицы table будет больше значения 50. Но все же, Query1 предназначен в большей мере не для редактирования таблиц, а для груповых операций с наборами данных или выборки, которая будет read only. И конечно, для редактирования лучше использовать TTable.
--------- Carpe diem!
Ответ отправил: Проходящий Мимо (статус: 7-ой класс)
Ответ отправлен: 02.08.2006, 09:31
Вопрос № 50.892
У меня в таблице БД MySQL русские буквы отображаются в виде знаков вопроса. Это в phpMyAdmin. Когда я с помощью php вытаскиваю это дело, скажем, в , отображаются точно такие же знаки вопроса.
Как мне изменить кодировку на виндовую (windows-1251, cp1251... что-то подобное)?
Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Марк Крейн!
В PHPMyAdmin открываете БД, далее Операции.
Снизу есть пункт Сравнение. Тут и выбираете нужную кодировку.
У меня стоит cp1251_general_ci.
Также в запрос PHP можно добавить (см. приложение).
Удачи!
Приложение:
--------- Ответы на все вопросы - на сайте www.ya.ru ☺
Ответ отправил: Устинов Сергей Евгеньевич (статус: Студент)
Ответ отправлен: 02.08.2006, 23:34 Оценка за ответ: 3 Комментарий оценки: Уже пробовал таким образом. У меня вот такое сообщение при попытке вытащить данные: Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='
Пробовал так: set character_set_server='cp1251'; set character_set_client='cp1251'; Всё это в phpMyAdmin... не помогает :(