1 Востаннє редагувалося Romanvolja (Вчора 19:15:56)

Тема: Довжина рядка SQL запиту

Підкажіть будь-ласка чи є обмеження у величині рядка SQL запиту?
І чи є можливість його збільшити?
база даних Access 2003 року
SQL запити пишу в Delphi

adoQrMainCoins.SQL.Add('??? ')

2

Re: Довжина рядка SQL запиту

Повинно бути 65536 байт, тобто якщо 2 байти на символ то 32768 символів на запит.

Ось як можна при потребі сплітити запити:

adoQrMainCoins.SQL.Clear;
adoQrMainCoins.SQL.Add('SELECT ID, Name, Description'); 
adoQrMainCoins.SQL.Add('FROM Coins'); 
adoQrMainCoins.SQL.Add('WHERE Value > 1000'); 

Або ж використовувати в'юхи (view).

3 Востаннє редагувалося Romanvolja (Вчора 21:24:57)

Re: Довжина рядка SQL запиту

frz написав:

Повинно бути 65536 байт, тобто якщо 2 байти на символ то 32768 символів на запит.

Ось як можна при потребі сплітити запити:

adoQrMainCoins.SQL.Clear;
adoQrMainCoins.SQL.Add('SELECT ID, Name, Description'); 
adoQrMainCoins.SQL.Add('FROM Coins'); 
adoQrMainCoins.SQL.Add('WHERE Value > 1000'); 

Або ж використовувати в'юхи (view).

Дякую за інформацію.

Для вирівнювання тексту запиту я ще натикав пробілів то вони також йдуть як символ??

    'amsMainCoins.IDMainCoins,                    msMainCoinGain.MainCoinGain, '+
    'msMainDateGain.MainDateGain,               msMainCoinSource.MainCoinSource, '+
    'msTypeCompani.TypeCompani,                msMainProviderCoin.MainProviderCoin, '+

може краще переробити таким чином
   

    'amsMainCoins.IDMainCoins, '+                   ' msMainCoinGain.MainCoinGain, '+

4

Re: Довжина рядка SQL запиту

Пробіли це теж символ. Для форматування використовувати пробіли теоретично можна, але корисного навантаження вони не несуть.

Так само невідомо чи запитання про максимальну кількість символів предметне, тобто чи вже досягли максимуму. Якщо так, тоді просто можна розділити запит на декілька рядків, як показано вище. Але такі гігантські запити рідко зустрічаються. Виникає запитання, навіщо. Гігантські запити важко мейнтейнити, варто подумати як спростити.

5 Востаннє редагувалося Torbins (Вчора 23:22:06)

Re: Довжина рядка SQL запиту

Перший раз чую, щоб SQL.Add('??? ') мав якісь особливі обмеження на довжину. Стандартне обмеження на довжину рядків в Делфі - 2 Гб. Це обмеження стосується усіх рядків, не лише параметру SQL.Add.
Що стосується обмеження в 65 Кб, то ви напевне плутаєте з VCL компонентами типу Мемо. Мемо є тонкою обгорткою над старими віндовими контролами, і у нього дійсно є обмеження на довжину рядка, яке накладає сама вінда.

Подякували: Romanvolja1

6

Re: Довжина рядка SQL запиту

Я вже в базі даних по скорочував назви таблиць та стовпчиків
Було так:

   'msWorldCoinDenomination.CoinDenomination '+
    'LEFT JOIN msWorldCoinDenomination ON amsWorldCoins.WorldCoinDenomination=msWorldCoinDenomination.ID '+

Скоротив так:

    'msDenomination.Denomination '+
    'LEFT JOIN msDenomination ON amsWorldCoins.Denomination=msDenomination.ID '+

таким чином третину символів відкинув та проблема не зникла, думаю що причина не в кількості символів, а в чомусь другому.

В мене складається враження що кількість ''JOIN'' обмежена.

7

Re: Довжина рядка SQL запиту

Romanvolja написав:

обмеження у величині рядка SQL запиту?

база даних Access 2003

support.microsoft.com написав:

Кількість символів в інструкції SQL : Приблизно 64 000

Максимальне значення може бути менше, якщо запит містить багатозначні поля підстановки (лише ACCDB-файл).

Джерело: Специфікації Access > Специфікації баз даних > Запит

Подякували: Romanvolja1

8

Re: Довжина рядка SQL запиту

Romanvolja написав:

Я вже в базі даних по скорочував назви таблиць та стовпчиків
Було так:

   'msWorldCoinDenomination.CoinDenomination '+
    'LEFT JOIN msWorldCoinDenomination ON amsWorldCoins.WorldCoinDenomination=msWorldCoinDenomination.ID '+

Скоротив так:

    'msDenomination.Denomination '+
    'LEFT JOIN msDenomination ON amsWorldCoins.Denomination=msDenomination.ID '+

таким чином третину символів відкинув та проблема не зникла, думаю що причина не в кількості символів, а в чомусь другому.

В мене складається враження що кількість ''JOIN'' обмежена.

А ця "проблема не зникла" в чому саме? Яка конкретно.помилка?

9

Re: Довжина рядка SQL запиту

leofun01 написав:
Romanvolja написав:

обмеження у величині рядка SQL запиту?

база даних Access 2003

support.microsoft.com написав:

Кількість символів в інструкції SQL : Приблизно 64 000

Максимальне значення може бути менше, якщо запит містить багатозначні поля підстановки (лише ACCDB-файл).

Джерело: Специфікації Access > Специфікації баз даних > Запит

Я скопіював свій SQL запит в Notepad++ там показує кількість символів їх є 5030