Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.09.2010, 13:07   #1
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию Delphi + MySQL (типы полей)

Всем привет.
Программа написана в связке Delphi + MySQL с использованием компонентов MyDAC.
В таблицах MySQL есть типы полей, которые Delphi "не видит".
Например, DOUBLE или VARCHAR. Мне необходимо узнать тип поля таблицы.
Если я указываю на поля VARCHAR или CHAR и пишу
Код:
if Table.FieldDefs.Items[i].DataType = ftString then...
то код срабатывает, хотя тип не STRING, а VARCHAR.
Тип ftMemo срабатывает на типах полей TINYTEXT, MEDIUMTEXT, TEXT, LONGTEXT.
Тип FLOAT определяется, а тип DOUBLE определить вообще не удается и т.д.
1. Как программно узнать точный тип поля таблицы MySQL?
2. Как узнать длину поля (если она есть)?
3. Как узнать является ли поле автоинкрементным
ftAutoinc не годится, т.к. поле является INT(11) т.е. ftInteger)?
Спасибо.
_SERGEYX_ вне форума Ответить с цитированием
Старый 03.09.2010, 14:38   #2
RuVarez
Форумчанин
 
Аватар для RuVarez
 
Регистрация: 25.08.2010
Сообщений: 258
По умолчанию

в SQL VArchar ето и есть String
RuVarez вне форума Ответить с цитированием
Старый 03.09.2010, 15:51   #3
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Спрошу по-другому:
Как из Delphi программно отличить
Char от Varchar,
Float от Double,
Int от Bigint ??
_SERGEYX_ вне форума Ответить с цитированием
Старый 05.09.2010, 14:22   #4
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Не хочу показаться грубым но вам стоит почитать о типах данных MySQL.
А также о типах данных Delphi.
Тогда все встанет на свои места и не будет возникать вопроса о том что такое в MySQL char, а что такое varchar. И в чем их отличия.
Гугль вам в помощь.
Типы в MySQL
http://www.google.com/search?sourcei...B+%D0%B2+Mysql
Типы в Delphi
http://www.google.com/search?sourcei...+%D0%B2+Delphi
Вот я даже за вас часть работы сделал Вам осталось только почитать и понять.
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)

Последний раз редактировалось rdama; 05.09.2010 в 14:25.
rdama вне форума Ответить с цитированием
Старый 06.09.2010, 15:50   #5
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Я знаю чем отличаeтся char от varchar, и какие бывают типы полей в различных СУБД.
Вопрос совсем в другом. Например, первое поле в mysql-таблице integer.

Код:
if MySqlTable.FieldDefs.Items[0].DataType = ftInteger then 
showmessage('Это поле Integer') else showmessage('Это поле не Integer')
Ну, и как написать такой код, если первое поле Double?
_SERGEYX_ вне форума Ответить с цитированием
Старый 07.09.2010, 05:30   #6
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Очень хорошо
Цитата:
Я знаю чем отличаeтся char от varchar, и какие бывают типы полей в различных СУБД
Теперь почитай о типах в Delphi. Посмотри какие типы поддерживает MyDAC.
А для поля Double нужно использовать ftFloat.
Это для UniDAC, но это равносильно и для MyDAC.
Код:
      if UniTable1.Fields[I].DataType = ftFloat then
        Memo1.Lines.Add(UniTable1.Fields[I].FullName+': Double');
Ну и еще всю инфу о БД и её объектах можно поднять из information_schema.
Там можно узнать точные типы полей.
Код:
USE information_schema;
SELECT * FROM `COLUMNS`
  WHERE TABLE_SCHEMA = 'Ваша схема'
  AND TABLE_NAME = 'Ваша таблица';
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)

Последний раз редактировалось rdama; 07.09.2010 в 05:32.
rdama вне форума Ответить с цитированием
Старый 07.09.2010, 10:16   #7
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Так в том и вопрос. В MySQL тип может быть и Float и Double.
И код if UniTable1.Fields[I].DataType = ftFloat then сработает на обоих. А нужно определить точно.
И как средствами Delphi определить, что тип поля является GEOMETRYCOLLECTION или MULTIPOLYGON?

Последний раз редактировалось _SERGEYX_; 07.09.2010 в 10:23.
_SERGEYX_ вне форума Ответить с цитированием
Старый 07.09.2010, 10:22   #8
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Wow, ну, и балда же я. Зациклился на дельфийском коде.
Простейший запрос
SHOW COLUMNS FROM TABLE
выводит всю нужную инфу о таблице.
Всем спасибо. Тему можно закрывать.
_SERGEYX_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Типы файлов (Delphi) VadEr Помощь студентам 8 16.07.2010 02:03
Объеденение полей запроса в для отображения нескольких полей в одном списке mrCreator Microsoft Office Access 3 08.08.2009 00:53
Типы в Delphi guffer Общие вопросы Delphi 6 09.07.2009 23:22
Типы полей ADOTable AnnNet БД в Delphi 2 21.07.2008 16:40