Albert, If as you sy we can alter the SYS_NEW record in an BEFORE INSERT or BEFORE UPDATE trigger I would appreciate your posting to this list. To the Best of knowledge the SYS_NEW record is implemented as a READ ONLY Cursor and cannot be altered within the trigger code.
Jim Bentley, American Celiac Society 1-504-737-3293 ________________________________ From: Albert Berry <[email protected]> To: RBASE-L Mailing List <[email protected]> Sent: Thursday, February 27, 2014 10:42 AM Subject: [RBASE-L] - RE: date time Jim, the Oracle syntax is slightly different than R:Base syntax, but R:Base can do everything in your example. I use triggers often. Maybe Bill Downall can jump in: the started using triggers in R:Base as soon as they were introduced. The need to change the new record before inserting it is handled somewhat differently, but that is exactly what the above discussion is all about: how do we create the exact insert time in the record without using a calculated data element. The timing is ever so slightly different in R:Base, but we can do it all. The SYS_NEW is the final product of the stored procedure in R:Base. In the specific problem of this thread, using .#NOW as a data element changes the record to be inserted at the time it is inserted to exactly the time of insert (to the 1/1000 of a second). Because R:Base triggers are stored procedures, you can program anything into your trigger. Different words for the same effect. Albert On 2/27/2014 7:07 AM, James Bentley wrote: > > > > > >If you think about this problem -- the need to alter data before a record is >INSERTED or UPDATED. Then one >solution would be the ability to Change record in question in a BEFORE INSERT trigger or a BEFORE UPDATE trigger. >Unfortunately as currently implemented SYS_NEW records are read only. If such records were made changeable >for only the BEFORE INSERT and BEFORE UPDATE one could change data in the appropriate record before the >database changes are effected. You could use a command similar to UPDATE SET colname=.value WHERE CURRENT OF SYS_NEW. >For example here is what ORACLE allows you to do in a BEFORE INSERT trigger > >Oracle/PLSQL: BEFORE INSERT Trigger >This tutorial explains how to create a BEFORE INSERT Trigger in Oracle with >clear, concise examples. >Description >A BEFORE INSERT Trigger means that Oracle will fire this trigger before the >INSERT operation is executed. >Syntax >The syntax to create a BEFORE INSERT Trigger in Oracle/PLSQL is: >CREATE [ OR REPLACE ] TRIGGER trigger_name BEFORE INSERT ON table_name [ FOR >EACH ROW ] DECLARE -- variable declarations BEGIN -- trigger code EXCEPTION >WHEN ... -- exception handling END; >Parameters or Arguments >OR REPLACE is optional. If specified, it allows you to re-create the trigger >is it already exists so that you can change the trigger definition without >issuing a DROP TRIGGER statement. >trigger_name is the name of the trigger to create. >BEFORE INSERT indicates that the trigger will fire before the INSERT operation >is executed. >table_name is the name of the table that the trigger is created on. >Restrictions > * You can not create a BEFORE trigger on a view. > * You can update the :NEW values. > * You can not update the :OLD values. >Note > * See also how to create AFTER DELETE, AFTER INSERT, AFTER UPDATE, > BEFORE DELETE, and BEFORE UPDATE triggers. > * See also how to drop a trigger. >Example >Let's look at an example of how to create an BEFORE INSERT trigger using the >CREATE TRIGGER statement. >If you had a table created as follows: >CREATE TABLE orders ( order_id number(5), quantity number(4), cost_per_item number(6,2), total_cost number(8,2), create_date date, created_by varchar2(10) ); >We could then use the CREATE TRIGGER statement to create an BEFORE INSERT >trigger as follows: >CREATE OR REPLACE TRIGGER orders_before_insert BEFORE INSERT ON orders FOR EACH ROW DECLARE v_username varchar2(10); BEGIN -- Find username of person performing INSERT into table SELECT user INTO v_username FROM dual; -- Update create_date field to current system date :new.create_date := sysdate; -- Update created_by field to the username of the person performing the INSERT :new.created_by := v_username; END; Jim Bentley >American Celiac Society >>________________________________ > From: TOM HART <[email protected]> >To: RBASE-L Mailing List <[email protected]> >Sent: Wednesday, February 26, 2014 9:33 PM >Subject: [RBASE-L] - RE: date time > > > >When you said you saw no change, does it show the datetime stamp? >Tom Hart > > > > > > >________________________________ > From: Dennis McGrath <[email protected]> >To: RBASE-L Mailing List <[email protected]> >Sent: Wednesday, February 26, 2014 12:33 PM >Subject: [RBASE-L] - RE: date time > > >Bummer. Normally, this is sufficient for a timestamp, but your requirements are stricter than that. > >Dennis McGrath >Software Developer >QMI Security Solutions >1661 Glenlake Ave >Itasca IL 60143 >630-980-8461 >[email protected] > >-----Original Message----- >From: [email protected] [mailto:[email protected]] On Behalf Of Jim Belisle >Sent: Wednesday, February 26, 2014 12:08 PM >To: RBASE-L Mailing List >Subject: [RBASE-L] - RE: date time > >With or without the dot it puts the time when the row first comes on the >screen not when the information is entered. >The time on the form changes when I enter the row. > >James Belisle > >Making Information Systems People Friendly Since 1990 > > > >-----Original Message----- >From: [email protected] [mailto:[email protected]] On Behalf Of Dennis >McGrath >Sent: Wednesday, February 26, 2014 12:03 PM >To: RBASE-L Mailing List >Subject: [RBASE-L] - RE: date time > >That should not be. >Did you put the string .#NOW in the default value definition of the >control? >Notice the dot in front of #NOW > >Dennis McGrath >Software Developer >QMI Security Solutions >1661 Glenlake Ave >Itasca IL 60143 >630-980-8461 >[email protected] >-----Original Message----- >From: [email protected] [mailto:[email protected]] On Behalf Of Jim >Belisle >Sent: Wednesday, February 26, 2014 11:18 AM >To: RBASE-L Mailing List >Subject: [RBASE-L] - RE: date time > >Dennis, > >I did as you suggested but the time entered is not the actual time of >entry but of the time the form started. >I tried staying on the form and doing multiple entries but the times in >the table were as much as one minute off. > >James Belisle > >Making Information Systems People Friendly Since 1990 > > > >-----Original Message----- >From: [email protected] [mailto:[email protected]] On Behalf Of Dennis >McGrath >Sent: Wednesday, February 26, 2014 10:30 AM >To: RBASE-L Mailing List >Subject: [RBASE-L] - RE: date time > >I'm assuming you are using a form based on the table, not a variable >form. >Make the default value of the TimeComp dbedit control = .#NOW you will >find this setting under the effects tab of the control. >The only time this setting has any effect is when you are inserting a >new row, which is what I believe you want. > > >Dennis McGrath >Software Developer >QMI Security Solutions >1661 Glenlake Ave >Itasca IL 60143 >630-980-8461 >[email protected] >-----Original Message----- >From: [email protected] [mailto:[email protected]] On Behalf Of Jim >Belisle >Sent: Wednesday, February 26, 2014 9:41 AM >To: RBASE-L Mailing List >Subject: [RBASE-L] - date time > > > >I have never used the DATETIME data type before. > >I set up a table with the field Timecomp having a DATETIME datatype > >On a form I want the DATETIME to show (constantly refreshing). > >This will be attached to a field above. > >When they hit a button The row will be saved (along with other info) >with this timestamp in the field. > >So each row will have a different time attached to the row. > > > >I tried making a variable on the form equal to the field. > >Then I added the system variable (date and time) to the form related to >the above variable. > >I put into the FORM timer to REFRESH this variable using the comp ID. > > > >I did not see any change. > >Any suggestions? > > > >James Belisle > > > >Making Information Systems People Friendly Since 1990 > > > > > > > > > > >

