2013-12-05 1 views
0

У меня есть приложение, которое отлично работает в среде разработки, но плохо работает при развертывании в качестве EXE. Когда я нажимаю на развертывание и создаю EXE, все мои запросы, которые запускаются через объекты DataStore, удаются (SQLCode 0), но возвращают нулевые строки. Из-за разочарования я перешел на видимые окна данных, и он волшебным образом снова работал под EXE. Поэтому я сделал datawindows невидимым и продолжал работать. Это просто странно. У меня есть другое приложение powerbuilder, которое намного больше, использует множество объектов DataStore (в одной базе данных), и они отлично работают.PowerStore DataStore терпит неудачу только при развертывании в виде EXE (но преуспевает как DataWindow)

DataStore ds_wacn 
ds_wacn = create datastore 
ds_wacn.DataObject = 'd_plateaccessions' 
ds_wacn.SetTransObject(SQLCA) 
ds_wacn.Retrieve(sLoad, iPlate) 
IF SQLCA.SQLCode < 0 then ... 
// Succeeds in development, fetches zero rows under EXE 

dw_wacn.SetTransObject(SQLCA) 
dw_wacn.Retrieve(sLoad, iPlate) 
IF SQLCA.SQLCode < 0 then ... 
// Succeeds in development and in EXE 

Я был очень осторожен, чтобы убедиться, что приложение, которое работает и одна, которая не используют одни и те же параметры для подключения к базе данных (но все еще может быть проблема там). Это Powerbuilder 11.5.1

ответ

3

Скорее всего, ваш объект DataWindow не будет скомпилирован в EXE.

При компиляции EXE PowerBuilder запускается в объекте Application и интеллектуально пытается определить, какие объекты должны быть включены. Поскольку d_plateaccessions ссылается только на строку в скрипте, она не включена.

Существует два способа обойти это.

Вы можете создать PBD для PBL, содержащего DataWindow. Создание ПБД вслепую включает все объекты в PBL. Этот метод довольно популярен, и многие люди просто отмечают все свои PBL для создания PBD и развертывания PBD.

Вы также можете создать PBR для EXE, сообщая компилятору, чтобы заставить определенные DataWindows и графические файлы в EXE. Если вы действительно хотите один EXE, но не хотите усилий по созданию соответствующего PBR, вы можете использовать PBL Peeper для создания PBR и скриптов, чтобы заставить все DataWindows и объекты (и найти всю соответствующую графику) в скомпилированный EXE, используя PBR Builder Plus сообщение.

Удача,

Terry.

+0

Данг, не может голосовать вас (недостаток репутации). Ага. Это оно. Объекты DataStore вводились одновременно с запросами. Если бы только ds_wacn.DataObject = 'd_plateaccessions' выложил бы ошибку ... Я не могу сказать вам, сколько раз у меня было неправильное обращение, которое заставляет хранилище данных или время выполнения измененного datawindow ничего не делать. Конечно, если бы он сказал мне: «Не могу создать datawindow, DataObject не существует». Я был бы так же озадачен! Мошенничество с оптимизацией компилятора на самом деле не было мышью переднего мозга с C++ в 90-х. – user922020

+0

Шляпа с пропеллером? Вы технократен, который сделал PBL Peeper? Этот продукт спас мой бекон десятки раз. – user922020

+0

Ну, я один с пальцами, который использует техно-котенок, да. (Клавиатуры - это чума в мире кошачьих ИТ.) Хорошо, что это помогает. – Terry

0

У меня проблема с вашими 4-мя рядами.

DataStore ds_wacn 
ds_wacn.DataObject = 'd_plateaccessions' 
ds_wacn.SetTransObject(SQLCA) 
dw_wacn.Retrieve(sLoad, iPlate) 

Действительно ли вы извлекаете dw_wacn вместо ds_wacn?

И не существует «создать» для вашего локального хранилища данных. Я не использую frenquently локального хранилища данных, но в этом случае код, как это в нашей программе

dataStore ds_myDs 
ds_myDds = create datastore 
ds_myDds.DataObject = 'myDataObject' 
ds_myDds.SetTransObject(SQLCA) 
ds_myDds.Retrieve(/*arguments or not*/)  

/* 
some code  
*/ 

destroy ds_myDs 
+0

Я отогнал вопрос от много назад и вперед между хранилищем данных и падением на форму datawindow. Это вызвало опечатки. Исправлено для потомков. – user922020

 Смежные вопросы

  • Нет связанных вопросов^_^