Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как (чем) ввести данные в unicode в таблицу Oracle ?


Страницы:   1 2

Игорь Шевченко ©   (2005-06-01 15:38:00) 

Имеется база данных Oracle, с типом полей NVARCHAR2(x), хотелось бы заполнить ее данными, в идеальном случае значение поля в каждой записи на своем языке (русский, английский, польский, китайский и т.д.).

Столкнулся с проблемой - SQL*Plus юникода не понимает, пытается перевести в ANSI, бесплатные компоненты для доступа к Oracle из скачанных на torry.net тоже не упоминают в своих readme поддержку unicode.

Кто-нибудь может посоветовать какое-нибудь бесплатноесредство или программное решение ?

Заранее благодарен.


Игорь Шевченко   (2005-06-02 14:58:00) [1]

Всем спасибо, особенно sniknik ©   (01.06.05 15:52) [3]

Все получилось.

unit main;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 Db, ADODB, StdCtrls, Mask, DBCtrls, TntDbCtrls, Grids, DBGrids,
 TntDBGrids, ExtCtrls, ComCtrls, TntComCtrls;

type
 TForm1 = class(TForm)
   ADOConnection1: TADOConnection;
   ADOTable1: TADOTable;
   DataSource1: TDataSource;
   TntDBGrid1: TTntDBGrid;
   TntDBEdit1: TTntDBEdit;
   TntDBEdit2: TTntDBEdit;
   DBNavigator1: TDBNavigator;
   ADOTable1W: TWideStringField;
   ADOTable1A: TWideStringField;
   ADOTable1LONGDATAW: TWideStringField;
   ADOTable1LONGDATAA: TWideStringField;
   TntDBRichEdit1: TTntDBRichEdit;
   TntDBRichEdit2: TTntDBRichEdit;
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

end.


object Form1: TForm1
 Left = 192
 Top = 107
 Width = 544
 Height = 454
 Caption = 'Form1'
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = 'MS Sans Serif'
 Font.Style = []
 OldCreateOrder = False
 PixelsPerInch = 96
 TextHeight = 13
 object TntDBGrid1: TTntDBGrid
   Left = 12
   Top = 184
   Width = 517
   Height = 240
   Anchors = [akLeft, akTop, akRight, akBottom]
   DataSource = DataSource1
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
   Font.Height = -11
   Font.Name = 'Tahoma'
   Font.Style = []
   ParentFont = False
   TabOrder = 0
   TitleFont.Charset = DEFAULT_CHARSET
   TitleFont.Color = clWindowText
   TitleFont.Height = -11
   TitleFont.Name = 'MS Sans Serif'
   TitleFont.Style = []
 end
 object TntDBEdit1: TTntDBEdit
   Left = 12
   Top = 40
   Width = 517
   Height = 21
   Anchors = [akLeft, akTop, akRight]
   DataField = 'W'
   DataSource = DataSource1
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
   Font.Height = -11
   Font.Name = 'Tahoma'
   Font.Style = []
   ParentFont = False
   TabOrder = 1
 end
 object TntDBEdit2: TTntDBEdit
   Left = 12
   Top = 72
   Width = 517
   Height = 21
   Anchors = [akLeft, akTop, akRight]
   DataField = 'A'
   DataSource = DataSource1
   TabOrder = 2
 end
 object DBNavigator1: TDBNavigator
   Left = 12
   Top = 8
   Width = 240
   Height = 25
   DataSource = DataSource1
   TabOrder = 3
 end
 object TntDBRichEdit1: TTntDBRichEdit
   Left = 12
   Top = 104
   Width = 229
   Height = 69
   DataField = 'LONGDATAW'
   DataSource = DataSource1
   TabOrder = 4
 end
 object TntDBRichEdit2: TTntDBRichEdit
   Left = 252
   Top = 104
   Width = 277
   Height = 69
   DataField = 'LONGDATAA'
   DataSource = DataSource1
   TabOrder = 5
 end
 object ADOConnection1: TADOConnection
   Connected = True
   ConnectionString =
     'Provider=OraOLEDB.Oracle.1;Persist Security Info=False;User ID=H' +
     'S_SIW;Data Source=orc7;Extended Properties=""'
   Provider = 'OraOLEDB.Oracle.1'
   Left = 16
   Top = 16
 end
 object ADOTable1: TADOTable
   Active = True
   Connection = ADOConnection1
   CursorType = ctStatic
   TableName = 'UNICODE_DATA'
   Left = 16
   Top = 52
   object ADOTable1W: TWideStringField
     FieldName = 'W'
     Size = 40
   end
   object ADOTable1A: TWideStringField
     FieldName = 'A'
     Size = 40
   end
   object ADOTable1LONGDATAW: TWideStringField
     DisplayWidth = 20
     FieldName = 'LONGDATAW'
     Size = 2000
   end
   object ADOTable1LONGDATAA: TWideStringField
     DisplayWidth = 20
     FieldName = 'LONGDATAA'
     Size = 4000
   end
 end
 object DataSource1: TDataSource
   DataSet = ADOTable1
   Left = 16
   Top = 88
 end
end


Табличка тоже простая:

create table unicode_data (
W NVARCHAR2(40) not null primary key,
A VARCHAR2(40) not null,
LONGDATAW NVARCHAR2(2000),
LONGDATAA VARCHAR2(4000))
/


evvcom   (2005-06-02 14:40:00) [2]

2ANB: У меня ODAC Net Edition 4.10 for Delphi7 только сейчас обратил внимание, что Net Edition. Инсталляха без сырцов. Если не трудно намыль мне исходники. А версия у тебя какая?


ANB   (2005-06-02 12:30:00) [3]

Ну дык, а как его еще ставить ? Можа правда не все, но он перебилдивается. Я на вскидку проверил, вроде ко всем дцу есть пасники и дфмки.


evvcom   (2005-06-02 11:53:00) [4]


> - обижаешь, откуда у меня dcu ломаная то, если я все сам
> компилил из исходников.

У тебя есть исходники ODAC?


Игорь Шевченко   (2005-06-02 10:41:00) [5]

ANB ©   (02.06.05 10:23) [25]


> - это легальный способ ?


Для этого ничего дополнительного покупать не требуется :)


> У меня казанские кореша вообще на прямую работу с OCI перешли,
> намного удобнее, грят.


Вообще-то у нас есть самостоятельно написанный неплохой набор компонент для работы через oci, но, на данном этапе, только с ANSI. Разумеется, он будет доделываться для поддержки unicode, собственно, мое желание заполнить таблицу строками разных языков служит частично и этой цели.


ANB   (2005-06-02 10:23:00) [6]


> на чистой системе через ADO
- это легальный способ ? У меня казанские кореша вообще на прямую работу с OCI перешли, намного удобнее, грят.


Игорь Шевченко   (2005-06-02 09:57:00) [7]

ANB ©   (02.06.05 09:16) [21]


> - тебе слать или не надо ?


Спасибо.
Я все-таки сначала попробую легальными способами, на чистой системе через ADO.
Если не получится, тогда попрошу, ок ?


ANB   (2005-06-02 09:27:00) [8]


> Значит dcu уже ломаная :)
- обижаешь, откуда у меня dcu ломаная то, если я все сам компилил из исходников.


evvcom   (2005-06-02 09:25:00) [9]


> Запускается на всех компах в конторе.

Значит dcu уже ломаная :)


ANB   (2005-06-02 09:16:00) [10]


> Игорь Шевченко ©   (01.06.05 22:00) [17]
- тебе слать или не надо ?
Есть :
- одак 5.10 под делфи с 5 по 8 и билдер 5 и 6
- доа 4.04 под делфи 7
все с исходниками


ANB   (2005-06-02 09:08:00) [11]


> Reindeer Moss Eater ©   (01.06.05 19:05) [14]
Посмотри мой пост 13 - не работает такой способ. У меня оракл 8, одак - 5.


ANB   (2005-06-02 09:08:00) [12]

Запускается на всех компах в конторе. Делфа стоит далеко не у всех. Вот DOA без ключа не работает. Но у меня ключ есть :)))


evvcom   (2005-06-02 08:59:00) [13]


> Одак и доа я не покупал, ставяться без ключа

DOA не юзал, а насчет ODAC... Да, ставится без ключа. Только попробуй сделать так: скомпиль exe, выгрузи Delphi, запусти скомпиленный exe. О результатах сообщи.


Игорь Шевченко   (2005-06-01 22:00:00) [14]

Завтра буду ставить на чистую систему клиента Oracle, Delphi и прочее. Сейчас у меня два клиента в одной системе, сдается мне, что путаница в них происходит. С ADO и TntControls получается любопытная ситуация, в design-time я вижу содержимое таблицы в Unicode (связка ADOConnection+ADOTable+DataSource+TntDBGrid), а при запуске приложения кодировка меняется непонятным образом и того, что я видел в design-time, я увидеть никак не могу. DLL-и клиента Oracle подгружаются вперемешку, OLE DB-Provider из 8-го клиента, oci из 9-го, а в среде несколько другой состав DLL. Мне лень искать причину, проще произвести эксперимент на чистой системе.

ЗЫ: Платных компонентов я не хочу.

ЗЗЫ: ADO я практически не знаю, просьба ногами сильно не пинать :)


Fay   (2005-06-01 20:21:00) [15]

Игорь Шевченко ©   (01.06.05 15:38)
М.б. тебе DOA дать? 8)


Shaman_Naydak   (2005-06-01 19:58:00) [16]

ODAC поддерживает WideString с версии 4.50, если не ошибаюсь


Reindeer Moss Eater   (2005-06-01 19:05:00) [17]

Вот и я засовываю в поле нужное мне значение и не мучаюсь.


ANB   (2005-06-01 17:34:00) [18]

Хм, нашел qrSQL.ParamByName('F1').AsWideString, запихал туда WideString строку. Ошибка та же.


ANB   (2005-06-01 17:32:00) [19]

Засовываю в параметр нужное значение и не мучаюсь


Reindeer Moss Eater   (2005-06-01 17:07:00) [20]

А как ты заставляешь его "есть" ну скажем Double или Integer или Varchar2?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо