Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

Ограничение длины результирующих полей   Найти похожие ветки 

 
Locker   (2004-04-10 16:15) [0]

При запросе (компонент TADOQuery):

SELECT
 P.Фамилия AS [Фамилия],
 P.Имя AS [Имя],
 P.Отчество AS [Отчество],
 P.Фамилия + " " + P.Имя + " " + P.Отчество AS [Пациент],
 ...
FROM
 [Пациенты] P


длина возвращаемого поля [Пациент] составляет 255 символов, хотя поля Фамилия, Имя, Отчетсво имеют длину по 20 символов, что в результате должно давать 60 символов.

Использование функции LEFT:
 LEFT(P.Фамилия + " " + P.Имя + " " + P.Отчество, 60) AS [Пациент]
не помогает.

И что делать-то? Памяти ведь жрет немеряно!


 
Locker   (2004-04-10 16:15) [0]

При запросе (компонент TADOQuery):

SELECT
 P.Фамилия AS [Фамилия],
 P.Имя AS [Имя],
 P.Отчество AS [Отчество],
 P.Фамилия + " " + P.Имя + " " + P.Отчество AS [Пациент],
 ...
FROM
 [Пациенты] P


длина возвращаемого поля [Пациент] составляет 255 символов, хотя поля Фамилия, Имя, Отчетсво имеют длину по 20 символов, что в результате должно давать 60 символов.

Использование функции LEFT:
 LEFT(P.Фамилия + " " + P.Имя + " " + P.Отчество, 60) AS [Пациент]
не помогает.

И что делать-то? Памяти ведь жрет немеряно!


 
RayRom ©   (2004-04-10 18:53) [1]

Извини я имползую MySQL  и по другому это делаю:
concat(FAM," ",left( name, 1  ) ,  ".", left( otch, 1 ) ,  "."  )  as  "F.I.O""


 
RayRom ©   (2004-04-10 18:53) [1]

Извини я имползую MySQL  и по другому это делаю:
concat(FAM," ",left( name, 1  ) ,  ".", left( otch, 1 ) ,  "."  )  as  "F.I.O""


 
Locker   (2004-04-11 11:30) [2]

Спасибо, RayRom... но, к сожалению, в Jet SQL 4.0 функция CONCAT не поддерживается, а конкатенация строк при помощи + и & приводит к вышеописанному результату.

Что ж делать-то?


 
Locker   (2004-04-11 11:30) [2]

Спасибо, RayRom... но, к сожалению, в Jet SQL 4.0 функция CONCAT не поддерживается, а конкатенация строк при помощи + и & приводит к вышеописанному результату.

Что ж делать-то?


 
RayRom ©   (2004-04-11 16:29) [3]

Ну тут вряд ля я смогу помочь, хех


 
RayRom ©   (2004-04-11 16:29) [3]

Ну тут вряд ля я смогу помочь, хех


 
ЮЮ ©   (2004-04-12 02:30) [4]

CAST(P.Фамилия + " " + P.Имя + " " + P.Отчество AS VarChar(60)) AS [Пациент]


 
ЮЮ ©   (2004-04-12 02:30) [4]

CAST(P.Фамилия + " " + P.Имя + " " + P.Отчество AS VarChar(60)) AS [Пациент]


 
Locker   (2004-04-12 15:17) [5]

К сожалению, ругается на:
CAST(P.Фамилия + " " + P.Имя + " " + P.Отчество AS VarChar(60)) AS [Пациент]
Пишет: "Неопознанная ошибка." и ни слова больше...

Самое печальное, что даже LEFT(P.Имя, 1) выдает результирующую строку в 255 символов! Первый символ - из имени, а все остальное - #0
Вот и что делать с этим? Как это оптимизировать?


 
Locker   (2004-04-12 15:17) [5]

К сожалению, ругается на:
CAST(P.Фамилия + " " + P.Имя + " " + P.Отчество AS VarChar(60)) AS [Пациент]
Пишет: "Неопознанная ошибка." и ни слова больше...

Самое печальное, что даже LEFT(P.Имя, 1) выдает результирующую строку в 255 символов! Первый символ - из имени, а все остальное - #0
Вот и что делать с этим? Как это оптимизировать?


 
Johnmen ©   (2004-04-12 15:48) [6]

За оптимизацию чего конкретно борьба ?


 
Johnmen ©   (2004-04-12 15:48) [6]

За оптимизацию чего конкретно борьба ?


 
Locker   (2004-04-12 16:06) [7]

Борьба за оптимизацию используемой памяти.

При запросе данных:

SELECT
P.Фамилия AS [Фамилия],
P.Имя AS [Имя],
P.Отчество AS [Отчество],
P.Фамилия + " " + P.Имя + " " + P.Отчество AS [Пациент],
...
FROM
[Пациенты] P


возвращаемое поле [Пациент] имеет длину 255 символов. Так как тип данных в полях P.Фамилия, P.Имя, P.Отчество - WideString, то и тип конкатенированного поля - WideString. Итого, 255 символов * 2 байта = 510 байт. При этом поля P.Фамилия, P.Имя, P.Отчество имеют (каждое само по себе) длину в 20 символов, то-есть, суммарная длина - 60 символов (по 2 байта) - итого - 120 байт. Имеем 390 байт пустыми. И это в каждой записи. При результатах запроса в 50 тыс. строк имеем (390 * 50000) = 19,5 "пустых" МБайт!

"На пальцах": "Иванов--------------" + "Иван----------------" + "Иванович------------" = "ИвановИванИванович----------------------------------------------------------------------------------------------------- -----------------------------------------"
Тут "-" - пустой символ. Вместо "ИвановИванИванович" и 42 "-" в результирующем поле имеем "ИвановИванИванович" и 237 "-".

Вопрос: как получить в результирующем поле только 60 (реальных) символов без дополняющих (до 255) символов? То-есть, мне надо, чтобы тип данных для результирующего поля [Пациент] был char(60), а не (по "понятиям" MS Jet) - char(255).


 
Locker   (2004-04-12 16:06) [7]

Борьба за оптимизацию используемой памяти.

При запросе данных:

SELECT
P.Фамилия AS [Фамилия],
P.Имя AS [Имя],
P.Отчество AS [Отчество],
P.Фамилия + " " + P.Имя + " " + P.Отчество AS [Пациент],
...
FROM
[Пациенты] P


возвращаемое поле [Пациент] имеет длину 255 символов. Так как тип данных в полях P.Фамилия, P.Имя, P.Отчество - WideString, то и тип конкатенированного поля - WideString. Итого, 255 символов * 2 байта = 510 байт. При этом поля P.Фамилия, P.Имя, P.Отчество имеют (каждое само по себе) длину в 20 символов, то-есть, суммарная длина - 60 символов (по 2 байта) - итого - 120 байт. Имеем 390 байт пустыми. И это в каждой записи. При результатах запроса в 50 тыс. строк имеем (390 * 50000) = 19,5 "пустых" МБайт!

"На пальцах": "Иванов--------------" + "Иван----------------" + "Иванович------------" = "ИвановИванИванович----------------------------------------------------------------------------------------------------- -----------------------------------------"
Тут "-" - пустой символ. Вместо "ИвановИванИванович" и 42 "-" в результирующем поле имеем "ИвановИванИванович" и 237 "-".

Вопрос: как получить в результирующем поле только 60 (реальных) символов без дополняющих (до 255) символов? То-есть, мне надо, чтобы тип данных для результирующего поля [Пациент] был char(60), а не (по "понятиям" MS Jet) - char(255).


 
Johnmen ©   (2004-04-12 16:13) [8]

Сделать вычисляемое поле в клиентской программе. Тогда память отъедаться будет не более <видимое кол-во записей>*<max длина>.


 
Johnmen ©   (2004-04-12 16:13) [8]

Сделать вычисляемое поле в клиентской программе. Тогда память отъедаться будет не более <видимое кол-во записей>*<max длина>.


 
Locker   (2004-04-12 19:38) [9]

А как насчет возможности создания временных индексов?

Может, все же есть возможность задать размер поля в SQL запросе?


 
Locker   (2004-04-12 19:38) [9]

А как насчет возможности создания временных индексов?

Может, все же есть возможность задать размер поля в SQL запросе?



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.039 c
11-1068809937
aser
2003-11-14 14:38
2004.05.09
почему добавленный вручную в uses модуль после build пропадает ?


4-1079681594
Dmitry-K
2004-03-19 10:33
2004.05.09
Работа с двумя мониторами???


1-1082631546
CraKer
2004-04-22 14:59
2004.05.09
Курсор..


1-1082302900
TechnDreamer
2004-04-18 19:41
2004.05.09
Обработка текста в TRichedit с учетом форматирования


1-1082399221
Kemik
2004-04-19 22:27
2004.05.09
Создание нового компонента.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский