Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

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

 
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""


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

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

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


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

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


 
ЮЮ ©   (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
Вот и что делать с этим? Как это оптимизировать?


 
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).


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

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


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

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

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



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

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.043 c
3-1081539621
Mishenka
2004-04-09 23:40
2004.04.11
Как удалить поле из таблицы?


14-1081886702
SergP
2004-04-14 00:05
2004.04.11
Хотя сейчас и не пятница, но .... (Задачка)


3-1079290162
Zilog
2004-03-14 21:49
2004.04.11
Работа с данными из базы данных!


14-1079638653
E1
2004-03-18 22:37
2004.04.11
А если создать аналог америкосовского JobFind а?


1-1082816283
jiurasic
2004-04-24 18:18
2004.04.11
Как работать с неизвестным типом данных?