Topic: имена полей таблицы

Пытаюсь получить список имен полей таблицы

SQLExecute('SELECT group_concat(name,",") pragma_index_info dbname')

Не могу понять, что я делаю не так?

Re: имена полей таблицы

Это какой-то глюк 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;
Визуальное программирование: блог и телеграм-канал.

3 (edited by pavlenko.vladimir.v 2023-10-19 14:34:04)

Re: имена полей таблицы

k245 wrote:

Это какой-то глюк MVDB. Столкнулся с похожей проблемой при написании функции проверки существования поля таблицы:

в общем  проще сделать через SQL запрос, вывести результат в грид и потом пройтись по колонке с именами
я нечто подобное хотел с DataSet проделать, но у меня так и не вышло получить количество  записей в поле "name"  и просто по индексу получить имя поля тоже не вышло.

4 (edited by sparrow 2023-10-19 16:19:04)

Re: имена полей таблицы

Да есть такое.

MVD не поддерживает такую команду для PRAGMA, а версия sqlite еще не поддерживает pragma_table_info.

SELECT * from pragma_table_info('tablename')

Выход:  замена sqlite.dll или через тернии к звездам.
Например отсюда:

select * from sqlite_master

5 (edited by sparrow 2023-10-19 17:29:45)

Re: имена полей таблицы

А почему не получилось через TDataSet ???


  sqlquery('SELECT * FROM table WHERE id=0', Results);
  showmessage(inttostr(results.fieldcount));
  showmessage(results.fields[0].FieldName);  // id
...

Re: имена полей таблицы

sparrow wrote:

А почему не получилось через TDataSet ???


  sqlquery('SELECT * FROM table WHERE id=0', Results);
  showmessage(inttostr(results.fieldcount));
  showmessage(results.fields[0].FieldName);  // id
...

ну да, это я понял, что туплю.  Я пытался получить  список полей в БД через  (pragma_index_info), а там вытянуть амена полей из колонки name.

Re: имена полей таблицы

Обратите внимание, что pragma_index_info это информация о столбцах индексов в таблице
А информация о столбцах таблицы это pragma_table_info.
Ну это все равно не для MVD.

8 (edited by k245 2023-10-20 06:04:24)

Re: имена полей таблицы

sparrow wrote:

Обратите внимание, что pragma_index_info это информация о столбцах индексов в таблице
А информация о столбцах таблицы это pragma_table_info.
Ну это все равно не для MVD.

Работает в MVDB, но немного иначе:

SQLQuery('PRAGMA table_info(' + ATableName + ') ', tmpDataSet);
Визуальное программирование: блог и телеграм-канал.

Re: имена полей таблицы

Такого я не пробовал. ((( Будем знать.
Правда и задачи у меня еще такой не было, проверять имена.


Наверное я бы заменил dll.
В новых версиях больше вкусностей для ручных запросов.
А подключить расширения к SQLite не удалось.