Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Hibernate. JPA Mapping. Рекурсия в отношении

Здравствуйте!!!  :smile 

У меня вопрос по jpa аннотациям, не могу найти в гугле решение. 
Есть сущность, которая ссылается на себя же, не могу понять как с помощью аннотаций это указать, т.е. вот так у меня не работает:

Код

@Comment("Таблица тест")
@Entity
@Table(name = "DB_TEST")
public class TestClass {

   @Comment("Поле сущности Тест")
   @OneToOne
   @JoinColumn(name = "TESTID")
   private TestClass  test;
}


когда комментирую это поле, то все работает и все сущности создаются в БД. Помогите пожалуйста!  :help 
Ответ:
а вот так заработало:

Код

@Comment("Таблица тест")
@Entity
@Table(name = "DB_TEST")
public class TestClass {
   @Comment("Поле сущности Тест")
   @ManyToOne
   @JoinColumn(name = "TESTID")
   private TestClass  test;
}


Вопрос: EEncodingError with message 'No mapping for the Unicode character exists in target multi-'

Всем привет!
перевожу проект с Delphi 6 на Delphi XE6.
Приложение работает с MS SQL Server через SDAC.
Основной проект загружает плагины в bpl.
Так вот обнаружился досадный баг:
"EEncodingError with message 'No mapping for the Unicode character exists in target multi-byte code page'.
Баг проявляется если логин пользователя состоит из кириллицы.

Ошибка появляется при вызове
frm := frmClass.Create( Self ); 
вот в этой процедуре-загрузке плагина:

function TfrmMain.LoadPluginPackage( fname, clname : Ansistring ) : TForm;
  var
    FileName : TFileName;
    frmClass : TFormClass;
    frm : TForm;
    version : Ansistring;
  begin
    // определение версии bpl и добавление её в CAPTION.
    version := FileVersion( fname );

    FPackageHandle := LoadPackage( fname );
    if FPackageHandle = 0
    then
      RaiseLastWin32Error( );

    frmClass := TFormClass( GetClass( clname ) );
    if not Assigned( frmClass )
    then
    begin
      MessageBox( Handle, PChar( Format( 'Не найден класс %s.%s',
        [ fname, clname ] ) ), 'Ошибка', MB_APPLMODAL + MB_ICONERROR + MB_OK );
      exit;
    end;
    frm := frmClass.Create( Self ); // Вот тут ошибка!

    frm.Caption := frm.Caption + '| версия: ' + version;
    result := frm;
  end;


Нашёл вот такой BugReport, который, по всей видимости всё ещё открыт и актуален для Delpgi XE8

Кто-то сталкивался с таким? Есть варианты "обхода" кроме переименовывания MS SQL логинов?
В свойствах проекта в разделе Delphi Compiler/Compiling опция Code Page всгда стояла 0. Пробовал поставить 1251 - не спасает.
Куда копать, подскажите, кто в курсе plz.
Ответ:
Romka-Fes
Кто-то сталкивался с таким? Есть варианты "обхода" кроме переименовывания MS SQL логинов?


А вы репорт-то чилали? O_o

Если у вас действительно это - то просто добавьте BOM.
Вопрос: Repeated column in mapping for entity

[2017-04-16 10:41:22,038] Artifact mezoline:war: java.lang.Exception: {"WFLYCTL0080: Failed services" => {"jboss.persistenceunit.\"mezoline-1.0-SNAPSHOT.war#mysql\"" => "org.jboss.msc.service.StartException in service jboss.persistenceunit.\"mezoline-1.0-SNAPSHOT.war#mysql\": javax.persistence.PersistenceException: [PersistenceUnit: mysql] Unable to build Hibernate SessionFactory
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: mysql] Unable to build Hibernate SessionFactory
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: com.mezoline.domain.Product column: manufacturer_id (should be mapped with insert=\"false\" update=\"false\")"},"WFLYCTL0412: Required services that are not installed:" => ["jboss.persistenceunit.\"mezoline-1.0-SNAPSHOT.war#mysql\""],"WFLYCTL0180: Services with missing/unavailable dependencies" => undefined}

В каком месте он Repeated ?

+
package com.mezoline.domain;

import com.mezoline.domain.interfaces.Identified;


import javax.faces.bean.ManagedBean;
import javax.persistence.*;
import javax.transaction.Transactional;
import java.math.BigDecimal;
import java.util.*;

/**
 * Created by Hett on 06.04.2017.
 * Store products data
 */

@Entity
@ManagedBean
@Transactional
public class Product implements Identified {

    @Id
    @GeneratedValue
    private Integer id;

    @Temporal(TemporalType.DATE)
    private Date created_at;

    @Temporal(TemporalType.DATE)
    private Date updated_at;

    private Boolean visible;

    private String name;

    private String description;

    private BigDecimal price;

    private Integer category_id;

    private Integer manufacturer_id;

    @ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
    @JoinTable(
            name = "product_category",
            joinColumns = @JoinColumn(name = "product_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(name = "category_id", referencedColumnName = "id")

    )
    private Collection<Category> categories = new LinkedHashSet<>();

    @ManyToOne(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
    @JoinColumn(name = "manufacturer_id", referencedColumnName = "id")
    private Manufacturer manufacturer;

    public void addCategory(Category category) {
        ProductCategory productCategory = new ProductCategory();
        productCategory.getId().setCategory_id(category.getId());
        productCategory.getId().setProduct_id(getId());
        productCategory.setProduct(this);
        productCategory.setCategory(category);
        categories.add(category);
        category.getProducts().add(this);
    }

    public Integer getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public Integer getCategory_id() {
        return category_id;
    }

    public void setCategory(Category category) {
        category_id = category.getId();
        categories.add(category);
    }

    public Collection<Category> getCategories() {
        return categories;
    }

    public void setCategories(Collection<Category> categories) {
        this.categories = categories;
    }

    public Boolean getVisible() {
        return visible;
    }

    public void setVisible(Boolean visible) {
        this.visible = visible;
    }

    public Integer getManufacturer_id() {
        return manufacturer_id;
    }

    public void setManufacturer_id(Integer manufacturer_id) {
        this.manufacturer_id = manufacturer_id;
    }

    public void setManufacturer(Manufacturer manufacturer) {
        this.manufacturer = manufacturer;
    }

    public Manufacturer getManufacturer()
    {
        return manufacturer;
    }
}


Во всем проекте он даже больше нигде не упоминается.
Ответ: А вообще не тафтология ли это?
Как понимаю он каким-то чудестным образом должен сам взаимные связи отслеживать и менять?

    public void addCategory(Category category) {
        ProductCategory productCategory = new ProductCategory();
        productCategory.getId().setCategory_id(category.getId());
        productCategory.getId().setProduct_id(getId());
        productCategory.setProduct(this);
        productCategory.setCategory(category);
        categories.add(category);
        category.getProducts().add(this);
    }
Вопрос: Blob поле обнуляется после мержа сессии.

Всем привет.

Тут такая проблема, есть таблица с тремя полями -
id,
num,
icon

Есть главная таблица, и есть связь One-to-Many главной таблицы с подчиненой:
        <set name="icon_data" inverse="true" cascade="all-delete-orphan" batch-size="50">
              <key column="PARENT_ID" not-null="true" property-ref="main_id"/>
              <one-to-many class="SomeEntity" />
        </set>


Вот hibernate mapping таблицы с картинкой.
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="com.some.model">
     
        <class name="SomeEntity" table="SOME_TABLE">
            <meta attribute="class-code">private static final long serialVersionUID = 1L;</meta>
            <id name="recid" column="ID" type="java.lang.Long">
                <generator class="sequence">
                    <param name="sequence">SEQ_SOME_GENERATOR_RECID</param>
                </generator>
            </id>
     
            <property name="PARENT_ID"   column="PARENT_ID" type="java.lang.String" not-null="true" />
            <property name="ICON"   column="ICON" type="java.sql.Blob"/>
        </class>
    </hibernate-mapping>

Вот
До мержа сессии у меня поле ICON - не пустое, в нем хранятся данные(картинка), но вот после мержа сессий - поле ICON - обнуляется. Хотя остальные поля нормально сохранятся в БД. В чем может быть проблема?
    record = (MainEntity) context.getSession().merge(record);


Спасибо.
Ответ:
В общем проблему решил в обход, после мержа сессии вручную устанавливать blob поле нужными данными.
Нашел вот такую инфу по этому поводу:
Цитата

In our application, using blobs works just fine when we use save(). However, when we use merge(), we get a null on nult null field exception. After tracing through Hibernate, I discovered that org.hibernate.type.Blob.replace() does not copy the blob.

If I change the replace method to return 'original' instead of 'target' (target is always null) it seams to work just fine.

Should I log this as a bug in Jira?
Вопрос: Hibernate Mapping Exception

Помогите, пожалуйста, с проблемой.
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
Caused by: org.hibernate.MappingException: An AnnotationConfiguration instance is required to use <mapping class="by.virkom.test.model.domain.Orders"/>
    at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1606)
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1561)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1540)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1514)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1434)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:1420)
    at by.virkom.test.util.HibernateUtil.getSessionFactory(HibernateUtil.java:26)
    at by.virkom.test.model.impl.OrdersServiceImpl.init(OrdersServiceImpl.java:25)
    at by.virkom.test.model.manager.TestManager.getInstance(TestManager.java:26)
    at by.virkom.test.managedbeans.OrdersBean.init(OrdersBean.java:37)
    ... 74 more
Говорит, что необходимо использовать AnnotationConfiguration. Но он deprecated.
Кроме того, начиная с 4 версии (вроде бы) Hibernate не содержит такого класса.
Я пробовал и 4 и 5 версии. Все бестолку. Уже два дня мучаюсь с этой проблемой.
На всякий случай:

hibernate.cfg.xml
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">test123</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.show_sql">true</property>
        <property name="nbm2dll.auto">create</property>
        <property name="hibernate.connection.CharSet">utf8</property>
        <property name="hibernate.connection.characterEncoding">utf8</property>
        <property name="hibernate.connection.useUnicode">true</property>
        <!--<property name="hibernate.connection.autocommit">false</property> -->
        <property name="hibernate.current_session_context_class">thread</property>
        <mapping class="by.virkom.test.model.domain.Orders" />
        <!--<mapping class="by.virkom.test.model.domain.Details" />-->
    </session-factory>
</hibernate-configuration>
HibernateUtil.java
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package by.virkom.test.util;
 
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
 
/**
 * Hibernate Utility class with a convenient method to get Session Factory
 * object.
 *
 * @author virkom
 */
public class HibernateUtil {
 
    private static SessionFactory sessionFactory;
     
    public static SessionFactory getSessionFactory() {
        if (sessionFactory == null) {
            // loads configuration and mappings
            Configuration configuration = new Configuration().configure();
            ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
                    .applySettings(configuration.getProperties()).build();
             
            // builds a session factory from the service registry
            sessionFactory = configuration.buildSessionFactory(serviceRegistry);           
        }
         
        return sessionFactory;
    }
}
Orders.java
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package by.virkom.test.model.domain;
 
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
 
/**
 *
 * @author virkom
 */
@Entity
@Table(name = "orders")
public class Orders implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic
    @NotNull
    @Column(name = "id")
    private Integer id;
    @Basic
    @NotNull
    @Size(min = 1, max = 100)
    @Column(name = "name")
    private String name;
    @Basic
    @NotNull
    @Size(min = 1, max = 250)
    @Column(name = "address")
    private String address;
    @Basic
    @NotNull
    @Column(name = "ordersum")
    private float ordersum;
    @Basic
    @NotNull
    @Column(name = "orderdate")
    @Temporal(TemporalType.DATE)
    private Date orderdate;
 
    public Orders() {
    }
 
    public Orders(Integer id) {
        this.id = id;
    }
 
    public Orders(Integer id, String name, String address, float ordersum, Date orderdate) {
        this.id = id;
        this.name = name;
        this.address = address;
        this.ordersum = ordersum;
        this.orderdate = orderdate;
    }
 
    public Integer getId() {
        return id;
    }
 
    public void setId(Integer id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getAddress() {
        return address;
    }
 
    public void setAddress(String address) {
        this.address = address;
    }
 
    public float getOrdersum() {
        return ordersum;
    }
 
    public void setOrdersum(float ordersum) {
        this.ordersum = ordersum;
    }
 
    public Date getOrderdate() {
        return orderdate;
    }
 
    public void setOrderdate(Date orderdate) {
        this.orderdate = orderdate;
    }
 
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }
 
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Orders)) {
            return false;
        }
        Orders other = (Orders) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }
 
    @Override
    public String toString() {
        return "by.virkom.test.model.domain.Orders[ id=" + id + " ]";
    }
    
}
Подскажите, пожалуйста, что тут можно сделать?
Ответ: Да, спасибо.
Вопрос: nhibernate как сделать join с дополнительной таблицей в mapping?

Столкнулся с проблемой что NH втихаря генерирует плохой запрос с IN, который казалось бы не должен возникать, но NH думает что так лучше :)
Рассмотрим такую схему классов:
class User{
    public IList<Payment> Payments {get;set;}
}
class Payment{
    public User User {get;set;}
    public Product Product  {get;set;}
    public decimal Sum {get;set;}
}
class Product{
    public Name {get;set;}
}

Для User объявлен маппинг:
mapping.HasMany(x => x.UserServicePayments)


Получается что при первом обращении к User.Payments в эту коллекцию загружаются все оплаты пользователя. Все работает как задумано и все последующие запросы типа:
user.Payments.Where(x=>x.Sum > 1000).ToArray() 

работают как положено, не генерируя лишний SQL, т.к. все Payment в коллекции.

НО! Когда я делаю запрос чуть глубже чем Payment, например:
user.Payments.Where(x=>x.Product.Name == n).ToArray()

то это приводит к генерации очень плохого запроса. NH берет все ProductId из коллекции user.Payments и запрашивает их:
select * from Product where id in (1,2,3,3,4... тут все id из user.Payments)
в плане такой запрос не позволяет использовать индекс, т.к. IN достаточно длинный, что приводит к full scan и падению системы по timeout. Вручную написать запрос с хинтом WITH(INDEX(MyIndex)) - не вариант.

Выходом я вижу как-то указать в маппинге для User, что вместе с Payment для поля Payments нужно загрузить ещё и Product. Примерно так:
mapping.HasMany(x => x.UserServicePayments).Join(x=>x.Product)
Но как это написать на fluetn nhibernate не пойму.
Спасибо!
Ответ: Ларчик то просто открывался, ребята.
Можно ведь указать чтобы Payment всегда джойнил Product с помощью:
paymentMapping.References(x => x.Product).Fetch.Join();

Это приводит к жадному джойну с продуктами, хотя местами это замедлит работу, но с целом в моем случае это спасение.
Удивительно, что это не помогало:
paymentMapping.References(x => x.Product).Not.LazyLoad();
Вопрос: Idhttp и No mapping for the Unicode character exists in the target multi-byte code page

Здравствуйте! Подскажите, пожалуйста как избавиться от этой ошибки: No mapping for the Unicode character exists in the target multi-byte code page
Использую следующий код:
Код C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    TIdHTTP *httpBrowse = new TIdHTTP(NULL);
    httpBrowse->Request->AcceptCharSet = "windows-1251,utf-8;q=0.7,*;q=0.7";
    httpBrowse->Request->AcceptLanguage = "ru-RU,ru;q=0.8,en-us;q=0.7,en;q=0.3";
    httpBrowse->ReadTimeout = readtimeintR * 1000;
    httpBrowse->ConnectTimeout = readtimeintR * 1000;
    bool rtime = false;
    String httpMemo;
    String forError = URL_ListBox->Items->Strings[numberUrl];
    try {
        httpBrowse->HandleRedirects = true;
 
        std::auto_ptr<TStringStream> ss (new TStringStream("", TEncoding::UTF8, true));
        httpBrowse->Get(TIdURI::URLEncode(redirLink), ss.get());
        httpMemo = ss->DataString;
 
        if (httpMemo != "") return httpMemo;
    }
Версия билдера XE7
Заранее Спасибо!
Ответ: Ну ни идет он там...
Полный код:
Код C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
    TIdHTTP *httpBrowse = new TIdHTTP(NULL);
    httpBrowse->Request->AcceptCharSet = "windows-1251,utf-8;q=0.7,*;q=0.7";
    httpBrowse->Request->AcceptLanguage = "ru-RU,ru;q=0.8,en-us;q=0.7,en;q=0.3";
    httpBrowse->ReadTimeout = readtimeintR * 1000;
    httpBrowse->ConnectTimeout = readtimeintR * 1000;
    bool rtime = false;
    String httpMemo;
    String forError = URL_ListBox->Items->Strings[numberUrl];
    try {
        httpBrowse->HandleRedirects = true;
        std::auto_ptr<TStringStream> ss (new TStringStream("", TEncoding::UTF8, true));
        httpBrowse->Get(TIdURI::URLEncode(redirLink), ss.get());
        httpMemo = ss->DataString;
        if (httpMemo != "") return httpMemo;
    }
    catch (EIdReadTimeout &Ert) {
        String forError = URL_ListBox->Items->Strings[numberUrl];
        errorTime = Now();
        ProtokolEvent_Memo->Lines->Add(TimeToStr(errorTime) + ": " + errorString [2] + " [" + forError + "]");
        PVirtualNode FirstNode;
        FirstNode = Result_VST->GetFirst(true);
        Result_VST->Selected[FirstNode] = true;
        Result_VST->FocusedNode = FirstNode;
        while (FirstNode) {
            Application->ProcessMessages();
            TListRecordResult *InfoNode_TextFind = (TListRecordResult*)Result_VST->GetNodeData(FirstNode);
            if (InfoNode_TextFind) {
                if ((InfoNode_TextFind->PoleRec_0 == "") && (InfoNode_TextFind->PoleRec_1 == IntToStr(numberUrl))){
                    Result_VST->Selected[FirstNode] = true;
                    Result_VST->FocusedNode = FirstNode;
                    Result_VST->FullExpand(FirstNode);
                    InfoNode_TextFind->PoleRec_2 = InfoNode_TextFind->PoleRec_2 + " - " + " " + Ert.Message;
                    InfoNode_TextFind->PoleRec_7 = 1;
                    break;
                }
            }
            FirstNode = Result_VST->GetNext(FirstNode, true);
        }
    }
    catch (EIdConnectTimeout &Ect) {
        String forError = URL_ListBox->Items->Strings[numberUrl];
        errorTime = Now();
        ProtokolEvent_Memo->Lines->Add(TimeToStr(errorTime) + ": " + errorString [2] + " [" + forError + "]");
        PVirtualNode FirstNode;
        FirstNode = Result_VST->GetFirst(true);
        Result_VST->Selected[FirstNode] = true;
        Result_VST->FocusedNode = FirstNode;
        while (FirstNode) {
            Application->ProcessMessages();
            TListRecordResult *InfoNode_TextFind = (TListRecordResult*)Result_VST->GetNodeData(FirstNode);
            if (InfoNode_TextFind) {
                if ((InfoNode_TextFind->PoleRec_0 == "") && (InfoNode_TextFind->PoleRec_1 == IntToStr(numberUrl))){
                    Result_VST->Selected[FirstNode] = true;
                    Result_VST->FocusedNode = FirstNode;
                    Result_VST->FullExpand(FirstNode);
                    InfoNode_TextFind->PoleRec_2 = InfoNode_TextFind->PoleRec_2 + " - " + " " + Ect.Message;
                    InfoNode_TextFind->PoleRec_7 = 1;
                    break;
                }
            }
            FirstNode = Result_VST->GetNext(FirstNode, true);
        }
    }
    catch (EEncodingError &EenCod) {
        std::auto_ptr<TStringStream> ss (new TStringStream());
        httpBrowse->Get(TIdURI::URLEncode(redirLink), ss.get());
        httpMemo = ss->DataString;
        if (httpMemo != "") return httpMemo;
    }
    catch (...) {
    }
    httpBrowse->HandleRedirects = false;
    try {
        std::auto_ptr<TStringStream> ss (new TStringStream("", TEncoding::UTF8, true));
        httpBrowse->Get(TIdURI::URLEncode(redirLink), ss.get());
        httpMemo = ss->DataString;
        if (httpMemo != "") return httpMemo;
    } catch (EIdHTTPProtocolException &E) {
        if ((E.ErrorCode == 302) ||
            (E.ErrorCode == 301) ||
            (E.ErrorCode == 303)) {
            try {
                httpBrowse->Response->Location = httpBrowse->Response->Location.Delete(httpBrowse->Response->Location.Pos("."), 1);
                if (httpBrowse->Response->Location.Pos("http://") == 0) {
                    httpBrowse->Response->Location = redirLink + httpBrowse->Response->Location;
                    redirLink = httpBrowse->Response->Location;
                }
                std::auto_ptr<TStringStream> ss (new TStringStream("", TEncoding::UTF8, true));
                httpBrowse->Get(TIdURI::URLEncode(httpBrowse->Response->Location), ss.get());
                httpMemo = ss->DataString;
                if (httpMemo != "") return httpMemo;
            } catch (EIdHTTPProtocolException &E) {
                if ((E.ErrorCode == 302) ||
                    (E.ErrorCode == 301) ||
                    (E.ErrorCode == 303)) {
                    try {
                        httpBrowse->Response->Location = httpBrowse->Response->Location.Delete(httpBrowse->Response->Location.Pos("."), 1);
                        if (httpBrowse->Response->Location.Pos("http://") == 0) {
                            httpBrowse->Response->Location = redirLink + httpBrowse->Response->Location;
                            redirLink = httpBrowse->Response->Location;
                        }
                        std::auto_ptr<TStringStream> ss (new TStringStream("", TEncoding::UTF8, true));
                        httpBrowse->Get(TIdURI::URLEncode(httpBrowse->Response->Location), ss.get());
                        httpMemo = ss->DataString;
                        if (httpMemo != "") return httpMemo;
                    } catch (EIdHTTPProtocolException &E) {
                        if ((E.ErrorCode == 302) ||
                            (E.ErrorCode == 301) ||
                            (E.ErrorCode == 303)) {
                            try {
                                httpBrowse->Response->Location = httpBrowse->Response->Location.Delete(httpBrowse->Response->Location.Pos("."), 1);
                                if (httpBrowse->Response->Location.Pos("http://") == 0) {
                                    httpBrowse->Response->Location = redirLink + httpBrowse->Response->Location;
                                    redirLink = httpBrowse->Response->Location;
                                }
                                std::auto_ptr<TStringStream> ss (new TStringStream("", TEncoding::UTF8, true));
                                httpBrowse->Get(TIdURI::URLEncode(httpBrowse->Response->Location), ss.get());
                                httpMemo = ss->DataString;
                                if (httpMemo != "") return httpMemo;
                            } catch (EIdHTTPProtocolException &E) {
                                if ((E.ErrorCode == 302) ||
                                    (E.ErrorCode == 301) ||
                                    (E.ErrorCode == 303)) {
                                    try {
                                        httpBrowse->Response->Location = httpBrowse->Response->Location.Delete(httpBrowse->Response->Location.Pos("."), 1);
                                        if (httpBrowse->Response->Location.Pos("http://") == 0) {
                                            httpBrowse->Response->Location = redirLink + httpBrowse->Response->Location;
                                            redirLink = httpBrowse->Response->Location;
                                        }
                                        std::auto_ptr<TStringStream> ss (new TStringStream("", TEncoding::UTF8, true));
                                        httpBrowse->Get(TIdURI::URLEncode(httpBrowse->Response->Location), ss.get());
                                        httpMemo = ss->DataString;
                                        if (httpMemo != "") return httpMemo;
                                    } catch (EIdHTTPProtocolException &E) {
                                        if ((E.ErrorCode == 302) ||
                                            (E.ErrorCode == 301) ||
                                            (E.ErrorCode == 303)) {
                                            try {
                                                httpBrowse->Response->Location = httpBrowse->Response->Location.Delete(httpBrowse->Response->Location.Pos("."), 1);
                                                if (httpBrowse->Response->Location.Pos("http://") == 0) {
                                                    httpBrowse->Response->Location = redirLink + httpBrowse->Response->Location;
                                                    redirLink = httpBrowse->Response->Location;
                                                }
                                                std::auto_ptr<TStringStream> ss (new TStringStream("", TEncoding::UTF8, true));
                                                httpBrowse->Get(TIdURI::URLEncode(httpBrowse->Response->Location), ss.get());
                                                httpMemo = ss->DataString;
                                                if (httpMemo != "") return httpMemo;
                                            } catch (EIdHTTPProtocolException &E) {
                                                StringErrorLink("Недопустимый уровень редиректа", 0, numberUrl);
                                            }
                                            catch (EEncodingError &EenCod) {
                                                std::auto_ptr<TStringStream> ss (new TStringStream());
                                                httpBrowse->Get(TIdURI::URLEncode(httpBrowse->Response->Location), ss.get());
                                                httpMemo = ss->DataString;
                                            }
                                        }
                                        else StringErrorLink(E.Message, 0, numberUrl);
                                    }
                                    catch (EIdReadTimeout &Ert) {
                                        StringErrorLink(Ert.Message, 0, numberUrl);
                                    }
                                    catch (EIdConnectTimeout &Ect) {
                                        StringErrorLink(Ect.Message, 0, numberUrl);
                                    }
                                    catch (EEncodingError &EenCod) {
                                        std::auto_ptr<TStringStream> ss (new TStringStream());
                                        httpBrowse->Get(TIdURI::URLEncode(httpBrowse->Response->Location), ss.get());
                                        httpMemo = ss->DataString;
                                        if (httpMemo != "") return httpMemo;
                                    }
                                }
                                else StringErrorLink(E.Message, 0, numberUrl);
                            }
                            catch (EIdReadTimeout &Ert) {
                                StringErrorLink(Ert.Message, 0, numberUrl);
                            }
                            catch (EIdConnectTimeout &Ect) {
                                StringErrorLink(Ect.Message, 0, numberUrl);
                            }
                            catch (EEncodingError &EenCod) {
                                std::auto_ptr<TStringStream> ss (new TStringStream());
                                httpBrowse->Get(TIdURI::URLEncode(httpBrowse->Response->Location), ss.get());
                                httpMemo = ss->DataString;
                                if (httpMemo != "") return httpMemo;
                            }
                        }
                        else StringErrorLink(E.Message, 0, numberUrl);
                    }
                    catch (EIdReadTimeout &Ert) {
                        StringErrorLink(Ert.Message, 0, numberUrl);
                    }
                    catch (EIdConnectTimeout &Ect) {
                        StringErrorLink(Ect.Message, 0, numberUrl);
                    }
                    catch (EEncodingError &EenCod) {
                        std::auto_ptr<TStringStream> ss (new TStringStream());
                        httpBrowse->Get(TIdURI::URLEncode(httpBrowse->Response->Location), ss.get());
                        httpMemo = ss->DataString;
                        if (httpMemo != "") return httpMemo;
                    }
                }
                else StringErrorLink(E.Message, 0, numberUrl);
            }
            catch (EIdReadTimeout &Ert) {
                StringErrorLink(Ert.Message, 0, numberUrl);
            }
            catch (EIdConnectTimeout &Ect) {
                StringErrorLink(Ect.Message, 0, numberUrl);
            }
            catch (EEncodingError &EenCod) {
                std::auto_ptr<TStringStream> ss (new TStringStream());
                httpBrowse->Get(TIdURI::URLEncode(httpBrowse->Response->Location), ss.get());
                httpMemo = ss->DataString;
                if (httpMemo != "") return httpMemo;
            }
        }
        else StringErrorLink(E.Message, 0, numberUrl);
    }
    catch (EIdReadTimeout &Ert) {
        if (!rtime) {
            String forError = URL_ListBox->Items->Strings[numberUrl];
            errorTime = Now();
            ProtokolEvent_Memo->Lines->Add(TimeToStr(errorTime) + ": " + errorString [2] + " [" + forError + "]");
            PVirtualNode FirstNode;
            FirstNode = Result_VST->GetFirst(true);
            Result_VST->Selected[FirstNode] = true;
            Result_VST->FocusedNode = FirstNode;
            while (FirstNode) {
                Application->ProcessMessages();
                TListRecordResult *InfoNode_TextFind = (TListRecordResult*)Result_VST->GetNodeData(FirstNode);
                if (InfoNode_TextFind) {
                    if ((InfoNode_TextFind->PoleRec_0 == "") && (InfoNode_TextFind->PoleRec_1 == IntToStr(numberUrl))){
                        Result_VST->Selected[FirstNode] = true;
                        Result_VST->FocusedNode = FirstNode;
                        Result_VST->FullExpand(FirstNode);
                        InfoNode_TextFind->PoleRec_2 = InfoNode_TextFind->PoleRec_2 + " - " + " " + Ert.Message;
                        InfoNode_TextFind->PoleRec_7 = 1;
                        break;
                    }
                }
                FirstNode = Result_VST->GetNext(FirstNode, true);
            }
        }
    }
    catch (EIdConnectTimeout &Ect) {
        if (!rtime) {
            String forError = URL_ListBox->Items->Strings[numberUrl];
            errorTime = Now();
            ProtokolEvent_Memo->Lines->Add(TimeToStr(errorTime) + ": " + errorString [2] + " [" + forError + "]");
            PVirtualNode FirstNode;
            FirstNode = Result_VST->GetFirst(true);
            Result_VST->Selected[FirstNode] = true;
            Result_VST->FocusedNode = FirstNode;
            while (FirstNode) {
                Application->ProcessMessages();
                TListRecordResult *InfoNode_TextFind = (TListRecordResult*)Result_VST->GetNodeData(FirstNode);
                if (InfoNode_TextFind) {
                    if ((InfoNode_TextFind->PoleRec_0 == "") && (InfoNode_TextFind->PoleRec_1 == IntToStr(numberUrl))){
                        Result_VST->Selected[FirstNode] = true;
                        Result_VST->FocusedNode = FirstNode;
                        Result_VST->FullExpand(FirstNode);
                        InfoNode_TextFind->PoleRec_2 = InfoNode_TextFind->PoleRec_2 + " - " + " " + Ect.Message;
                        InfoNode_TextFind->PoleRec_7 = 1;
                        break;
                    }
                }
                FirstNode = Result_VST->GetNext(FirstNode, true);
            }
        }
    }
    catch (EEncodingError &EenCod) {
        std::auto_ptr<TStringStream> ss (new TStringStream());
        httpBrowse->Get(TIdURI::URLEncode(redirLink), ss.get());
        httpMemo = ss->DataString;
    }
    catch (...) {
        StringErrorLink("Unknown Error", 0, numberUrl);
    }
    return httpMemo;
Вопрос: Ошибка приложения: No mapping for the Unicode

Всем доброго времени суток.

Столкнулся с такой проблемой: в готовом проекте нужно стало использовать пакеты (bpl). В настройках выставил галочку "Link with runtime packages" и нужные пакеты: "rtl;vcl;"
Запускаю приложение и он мне пишет что "Прекращена работа программы...", а потом диалог с ошибкой следующего содержания: "Exception EReadError in module rtl230.bpl at 00112148. Error reading Label1.Caption: No mapping for the Unicode character exists in the target multi-byte code page."

- Удаляю эту Label1 - он мне на другой компонент, у которого в свойствах заголовок или текст есть ругается и т.д.
(походу где есть русские символы)
- Убираю из пакетов "vcl" - запускается нормально, но выходит подобная ошибка при вызове динамически создаваемых визуальных объектов.
- Самое интересное: копирую приложение на другой ПК - запускается без проблем и работает (пробовал на win7x64, win7x86, winXP, даже на win server). Но при одном условии: там не должен быть установлен Delphi!
- Создавал пробный проект с такими же настройками, что только не кидал на форму и что только ни писал в заголовке у Label'ов, но ошибки не появилось.

Шрифт у всех объектов стоит: Arial.
Есть другой проект, с такими же настройками и с теми же bpl, который прекрасно работает.

Если у кого то возникала подобная проблема, то поделитесь опытом, куда хотя бы копать? В чем может быть проблема?
Ответ:
Сообщение от mss
все должно работать
либо Делфи криво встала либо мешают какие-то "левые" пакеты компонентов (криво встали, не для Сиеттла и т.д. и т.п.)
Возможно, главное причина понятна, спасибо за помощь
Вопрос: XML Mapping

Помогите разобраться, натолкните на мысль...
Вообщем есть xml с разным количеством строк (до 9000), с помощь xml mapping, преобразую такую xml в одну строку и загружаю в Access. Возможно ли сделать в отдельном окне просмотр xml в развернутом виде (чтобы видно было все строки)
Ответ:
Сообщение от Cold
XML -> EXCEL -> Grid
ну если вам нужен эксель - пихайте в эксель

но обычно читают, пишут в хранилище (stringlist\класс\массив) и уже из хранилища отображают на форме

эксель не рекомендуется использовать как хранилище по многим причинам
Вопрос: He получается отобразить blob-поле в DBImage

Всем доброго времени суток,

He получается отобразить blob-поле (картинки) в DBImage. Занесла правильный DataSource, Datafield. В базу я заношу картинки таким способом:
if OpenPictureDialog1.Execute then 
begin
ADOQuery1.Edit;
(ADOQuery1.Fields.FieldByName('pict')as TblobField).LoadFromFile(OpenPictureDialog1.FileName);
ADOQuery1.Post;
end;


что не так? ... Помогите очень важно
Ответ: igelchen,

Загружай в TImage, а уж его сохраняй в стрим.
Там заголовок служебный добавляется, с именем контейнера, который умеет читать этот файл.