Форум: "Базы";
Текущий архив: 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.04 c