То, что вы просите, называется «полиморфным поведением» (или «динамической диспетчеризацией»), и это базовая особенность C ++. Чтобы включить его, вам нужно сделать пару вещей:
Пометить ваши методы sayhello()
ключевым словом virtual
(т. Е. virtual void sayhello()
, а не просто void sayhello()
). )
Измените аргумент метода greet()
на передачу по ссылке или передачу по указателю, чтобы избежать проблем с разделением объектов (т. Е. int greet(const Mother & m)
, а не int greet(Mother m)
)
Как только вы это сделаете, компилятор будет разумно выбирать, какой метод sayhello()
вызывать во время выполнения, на основе фактического типа объекта аргумента m
, а не жесткое кодирование выбора во время компиляции на основе типа, явно указанного в списке аргументов функции greet
.
CREATE VIEW vw_product_services AS
SELECT DISTINCT products.pid AS id,
products.pname AS name,
products.p_desc AS description,
products.p_loc AS location,
products.p_uid AS userid,
products.isaproduct AS whatisit
FROM products
UNION
SELECT DISTINCT services.s_id AS id,
services.s_name AS name,
services.s_desc AS description,
services.s_uid AS userid,
services.s_location AS location,
services.isaservice AS whatisit
FROM services
Я попробовал это, и это работало! Спасибо все :)
У Вас есть различные типы, являющиеся unioned в тот же столбец. (Имена могут отличаться, но типы должны быть тем же, или по крайней мере auto-castable.), Но поскольку @Learning указывает, похоже на скручивание перечислений столбца SELECT.
На всякий случай правильный синтаксис (который работал на меня)
CREATE VIEW myView
AS
SELECT ...
Просто немного комментария об ОБЪЕДИНЕНИИ. ОБЪЕДИНЕНИЕ Только возвращает отличные значения Вашего набора результатов. Таким образом, нет никакой потребности использовать ВЫБОР, ОТЛИЧНЫЙ объединенный с ОБЪЕДИНЕНИЕМ. Вероятно, лучше, чтобы производительность не использовала ОТЛИЧНЫЙ также.
Больше информации об ОБЪЕДИНЕНИИ может быть найдено здесь: Оператор ОБЪЕДИНЕНИЯ SQL
Сообщение об ошибке находится в "QueryBrowser.pas", части mysql-gui-tools.
procedure TQueryBrowserForm.SQLCreateViewClick(Sender: TObject);
// ...
begin
if Assigned(ActiveResultset) and (ActiveResultset.ResultSet.query.query_type = MYX_QT_SELECT)then
// ...
else
ShowError('Creation error', _('A view can only be created from a active resultset of SELECT command.'), []);
end;
Это инициировано, не a) не имея активный набор результатов и b) запросом, имеющим неправильный тип.
Удаление "ОТЛИЧНОГО" имеют какое-либо значение? В любом случае это - ошибка в QueryBrowser, а не один MySQL. Создание представления непосредственно в MySQL должно быть достаточным как обходное решение.
Вы могли бы хотеть к swith порядок идентификатора пользователя и местоположения во втором выборе. Имена столбцов должны соответствовать от 1 до 1 во всех, выбирает объединения.
РЕДАКТИРОВАНИЕ: Для браузера запроса, поскольку это указывает, "Для создания представления из запроса, Вы, должно быть, выполнили запрос успешно. Чтобы быть более точным, представление создается из последнего успешно выполняемого запроса, не обязательно от запроса в настоящее время в области Запроса"
таким образом, необходимо выполнить запрос сначала перед созданием представления в браузере запроса.
Ошибка от браузера запроса и не mysql.