NetTalk Central
NetTalk Web Server => Web Server - Ask For Help => Topic started by: charl99 on November 21, 2012, 05:39:03 AM
-
Hi,
I thought I figured this out, but I'm hitting a snag:-
I have a simple Form that updates the Quotes file.
On this Form I populate the Client File as well.
Now, once I press on Save, I want to access:client.insert(), which works fine (in the Validate Insert embed point) and now I have my Client No, but then I want to say q:clientno = cli:clientno, or p_web.ssv('q:clientno',cli:clientno).
For the life of me I tried everything, I can't find the place to put that code so that it work. I simply end up with no Client No in the Quotes file.
Please help.
Thanks
Charl
-
I'm sorry Charl, I don't understand the question.
Maybe you could set up a small example to shoe what you're trying to do, and post that here?
cheers
Bruce
-
Hi Bruce,
OK, I am now so useless I cannot even get the example to work properly, but maybe that is because my TPS is kind of non-existent these days.
But I am sure from the example you will be able to see what I am trying to do.
Note, there is an extra file,Client, and it is on the Mailboxes Form as new Tab.
Thanks
Charl
I have been fighting with this since last week Friday, when I actually watched my 1st Webinar 'live' ever, from beginning to end...
Clarion8, NT 6.51
[attachment deleted by admin]
-
Hi Charl,
a couple of pointers;
a) after opening a file you need to do a .UseFile before using it. Especially if you are then gonna use File driver functions like GET.
b) you may want to add p_web._trace statements so that you can inspect what is happening where. For example you do a p_web.SessionQueuetoFile(client) and then use cli:clientno. Are you sure cli:clientno is set correctly there?
c) this bit of code seems unnecessary;
access:client.open()
p_web.SessionQueuetoFile(client)
access:client.insert()
access:client.Close()
because then all you're doing is
MAI:ClientNo = Cli:clientno
which could be replaced with
MAI:ClientNo = p_web.GSV('Cli:clientno ')
c) You do a get(client,Cli:KeyClientNo) with no error checking - did the GET succeed?
work with that - and if you need more clues post the updated example again.
cheers
Bruce
-
Hi Bruce,
Thanks for your pointers, yes, I forgot about that UseFile thing, I allways switch that Defer file opening to OFF in Global Properties. If you have time, maybe you can tell me WHY that thing default to ON and what is actually the reason for that thing? To me it feels like you just have to write another line of unnecessary code.
Anyway, I finally figured my problem out, most of the time I use Memory Forms, and then I use do openfiles and do closefiles to get the relevant information. That appears to be a bad idea when you use a Table Form, so by simply putting access:client.open() as opposed to do openfiles, the problem disappeared.
Everyday I learn something. Thanks.
Cheers
Charl
-
>> If you have time, maybe you can tell me WHY that thing default to ON and what is actually the reason for that thing? To me it feels like you just have to write another line of unnecessary code.
When you edit a table, you potentially need to alter data in all the related tables as well. Specifically if you change the primary key value, then the cascading change will affect lots of tables. So when you "open" a table, using the Relate: method it opens the file, and puts all the "related" tables in a sort of "ready, but not open" state. this is lazy opening.
Remember actually opening tables is very expensive, so you don't want to do that more than you have to. By turning off lazy opening you are dramatically slowing down the speed with which your browse opens.
If you use the relate: form of the open, then that's the same as Access.Open, and Access.Usefile _for that primary table_. But you used the Access.Open form, so you need the Access.Usefile call as well.
IMO the speed gain from lazy opening _far_ exceeds the effort of adding an extra line of code - and if you use the Relate.Open instead of Access.Open, you don't even need that.
cheers
Bruce