Topic: имена полей таблицы
Пытаюсь получить список имен полей таблицы
SQLExecute('SELECT group_concat(name,",") pragma_index_info dbname')
Не могу понять, что я делаю не так?
My Visual Database → Russian → имена полей таблицы
Пытаюсь получить список имен полей таблицы
SQLExecute('SELECT group_concat(name,",") pragma_index_info dbname')
Не могу понять, что я делаю не так?
Это какой-то глюк MVDB. Столкнулся с похожей проблемой при написании функции проверки существования поля таблицы:
function DB_FieldExists(ATableName: string; AFieldName: string): boolean;
// проверяет существование таблицы
var
tmpDataSet: TDataSet;
begin
case dbType of
DBT_UNKNOW:
RaiseException('DB_TableExists - не поддерживается для типа базы DBT_UNKNOW');
DBT_SQLITE:
begin
// Result := SQLExecute('SELECT COUNT(*) AS CNTREC FROM ( pragma_table_info('+ATableName+') WHERE name="'+AFieldName+'" )' ) = 1; // SQLite - не работает в MVDB, но работает в SQLiteStudio
Result := False;
SQLQuery('PRAGMA table_info(' + ATableName + ') ', tmpDataSet);
while not tmpDataSet.EOF do
begin
if UpperCase(tmpDataSet.FieldByName('name').asString) = UpperCase(AFieldName) then
begin
Result := True;
break;
end;
tmpDataSet.Next;
end;
tmpDataSet.Free;
end;
DBT_MYSQL:
RaiseException('DB_TableExists - не поддерживается для типа базы DBT_MYSQL');
end;
end;
Это какой-то глюк MVDB. Столкнулся с похожей проблемой при написании функции проверки существования поля таблицы:
в общем проще сделать через SQL запрос, вывести результат в грид и потом пройтись по колонке с именами
я нечто подобное хотел с DataSet проделать, но у меня так и не вышло получить количество записей в поле "name" и просто по индексу получить имя поля тоже не вышло.
Да есть такое.
MVD не поддерживает такую команду для PRAGMA, а версия sqlite еще не поддерживает pragma_table_info.
SELECT * from pragma_table_info('tablename')
Выход: замена sqlite.dll или через тернии к звездам.
Например отсюда:
select * from sqlite_master
А почему не получилось через TDataSet ???
sqlquery('SELECT * FROM table WHERE id=0', Results);
showmessage(inttostr(results.fieldcount));
showmessage(results.fields[0].FieldName); // id
...
А почему не получилось через TDataSet ???
sqlquery('SELECT * FROM table WHERE id=0', Results); showmessage(inttostr(results.fieldcount)); showmessage(results.fields[0].FieldName); // id ...
ну да, это я понял, что туплю. Я пытался получить список полей в БД через (pragma_index_info), а там вытянуть амена полей из колонки name.
Обратите внимание, что pragma_index_info это информация о столбцах индексов в таблице
А информация о столбцах таблицы это pragma_table_info.
Ну это все равно не для MVD.
Обратите внимание, что pragma_index_info это информация о столбцах индексов в таблице
А информация о столбцах таблицы это pragma_table_info.
Ну это все равно не для MVD.
Работает в MVDB, но немного иначе:
SQLQuery('PRAGMA table_info(' + ATableName + ') ', tmpDataSet);
Такого я не пробовал. ((( Будем знать.
Правда и задачи у меня еще такой не было, проверять имена.
Наверное я бы заменил dll.
В новых версиях больше вкусностей для ручных запросов.
А подключить расширения к SQLite не удалось.
My Visual Database → Russian → имена полей таблицы
Powered by PunBB, supported by Informer Technologies, Inc.
Theme Hydrogen by Kushi