|
Oracle 8.1.7 & ADO & Delphi 5
|
|||
---|---|---|---|
#18+
Имею такую команду (TADOCommand). 'insert into pictures(ID, Picture) Values(:P0, :P1)' Вызываю так: ParamByName('P0').AsInteger := 1; ParamByName('P0').LoadFromFile('c:\photo.jpg',ftVarBytes); Execute; Получаю ошибку: ORA-01036: illegal variable name/number. И эта ошибка происходит ТОЛЬКО тогда, когда картинка имеет размер больше 4 килобайт. Тип поля Picture - CLOB. ЧТО ДЕЛАТЬ? ПОМОГИТЕ!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2002, 13:57 |
|
Oracle 8.1.7 & ADO & Delphi 5
|
|||
---|---|---|---|
#18+
> ParamByName('P0').LoadFromFile('c:\photo.jpg',ftVarBytes); Может здесь P1 надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2002, 16:43 |
|
Oracle 8.1.7 & ADO & Delphi 5
|
|||
---|---|---|---|
#18+
А во-вторых: Исходя из названия поля PICTURE можно предположить что там будут храниться картинки. Тип поля CLOB предназначен для хранения Character Lagrge OBjects В вашем случае скорее всего надо использовать BLOB. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2002, 16:46 |
|
Oracle 8.1.7 & ADO & Delphi 5
|
|||
---|---|---|---|
#18+
>> ParamByName('P0').LoadFromFile('c:\photo.jpg',ftVarBytes); >Может здесь P1 надо? Опечатка. В коде, конечно, у меня стоит P1. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2002, 16:49 |
|
Oracle 8.1.7 & ADO & Delphi 5
|
|||
---|---|---|---|
#18+
Попробуйте сначала вставить строку с ID, а затем послать update pictures set picture = EMPTY_CLOB() where id = :P0 RETURNING Picture into :P1 ; ParamByName('P0').AsInteger := 1; ParamByName('P1').ParamType := ptInput ; //Обязательно ParamByName('P1').LoadFromFile('c:\photo.jpg',ftVarBytes); или ParamByName('P1').AsOraClob.LoadFromFile('c:\photo.jpg',ftVarBytes); ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2002, 17:10 |
|
Oracle 8.1.7 & ADO & Delphi 5
|
|||
---|---|---|---|
#18+
И во вторых: Конечно, же тип данных не CLOB а BLOB. Так кто-нибдь скажет как мне быть? Я уже устал бороться с этой проблемой. ПОМОГИТЕ!!!! Или это нерешаемо с ADO? Тогда кто-нибудь скажет, какими компонентами доступа лучше всего пользоваться? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2002, 17:10 |
|
Oracle 8.1.7 & ADO & Delphi 5
|
|||
---|---|---|---|
#18+
Попробуйте сначала вставить строку с ID, а затем послать update pictures set picture = EMPTY_CLOB() where id = :P0 RETURNING Picture into :P1 ; ParamByName('P0').AsInteger := 1; ParamByName('P1').ParamType := ptInput ; //Обязательно ParamByName('P1').LoadFromFile('c:\photo.jpg',ftVarBytes); или ParamByName('P1').AsOraClob.LoadFromFile('c:\photo.jpg',ftVarBytes); Получаю ошибку: ORA-00933: SQL command not properly ended ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2002, 18:16 |
|
Oracle 8.1.7 & ADO & Delphi 5
|
|||
---|---|---|---|
#18+
Размер буфера равен 32 Кб это что касается заноса картинки, а когда в процедуре есть параметр типа БЛОБ или КЛОБ возникает ошибка. 1. В параметрах вызываемой процедуры не должно быть таких типов. Но прежде чем выполнить эту процедуру необходимо в SQL+ запустить вот такой скриптик: Create DIRECTORY DOCUMENTS as 'Путь к файлу(ам)'; Create or replace Procedure Add_Text (Par in Varchar2, Par2 in Varchar2) is Text CLOB; Path_File BFILE; id_document NUMBER; File_Len Binary_Integer; DIRECTY_FILE VARCHAR2(30) := 'DOCUMENTS'; begin Path_File := BFILENAME(DIRECTY_FILE, Path); if DBMS_LOB.FILEEXISTS(Path_File) = 1 then File_Len := DBMS_LOB.GETLENGTH(Path_File); DBMS_LOB.FILEOPEN(Path_file,DBMS_LOB.LOB_READONLY); Insert into Table1(Par1,Par2,EMPTY_CLOB) RETURNING Name_Field_CLOB INTO Text; DBMS_LOB.LOADFROMFILE(Text, Path_File,File_Len); end; ЕСЛИ КТО ЗНАЕТ КАК ЕГО ОТ ТУДА ДОСТАТЬ! ПОДЕЛИТЕСЬ ПЛИЗ! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2002, 19:30 |
|
|
start [/forum/topic.php?fid=52&msg=32063237&tid=1992771]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 256ms |
total: | 387ms |
0 / 0 |