Skip to main content

SQL ile recid

print '** BEGIN **' declare @TABID int, @nextval bigint, @lastUsed bigint, @sql NVARCHAR(4000),

@msgName varchar(250), @tablename varchar(250)

DECLARE loopTrough CURSOR FOR

select TABID, NEXTVAL from systemsequences where systemsequences.Name =

'SEQNO' and

systemsequences.DATAAREAID = 'dat' and

systemsequences.TABID > 0


open loopTrough


FETCH next FROM loopTrough INTO @TABID, @nextval

WHILE @@FETCH_STATUS = 0

BEGIN



set @tablename = isnull((select [SQLNAME] from SQLDICTIONARY where

SQLDICTIONARY.FIELDID = 0 and SQLDICTIONARY.TableId = @TABID), '')


if @tablename <> ''

set @msgName = @tablename + '(No. ' + convert(varchar(20), @TABID) + ')'

else

set @msgName = '(No. ' + convert(varchar(20), @TABID) + ')'



print 'Analyze ' + @msgName + ' ...'


IF @tablename <> '' and

EXISTS (SELECT 1

FROM INFORMATION_SCHEMA.TABLES

WHERE TABLE_TYPE='BASE TABLE'

AND TABLE_NAME=@tablename)

begin


set @sql = N'SELECT @ret = MAX(RECID) FROM ' + @tablename

EXEC sp_executesql @sql, N'@ret bigint OUTPUT', @lastUsed OUTPUT


if (@nextVal < @lastUsed)

begin

print '> have to be corrected (next RecId: ' + convert(varchar(250),

@nextVal) + ' < max RecID: ' + convert(varchar(250), @lastUsed) + ')'

update systemsequences set nextval = (@lastUsed + 1) where

systemsequences.Name = 'SEQNO' and

systemsequences.TABID = @TABID and

systemsequences.DATAAREAID = 'dat'

print '> corrected; next RecId: ' + convert(varchar(250), @lastUsed + 1)

end

end

else

begin

print @msgName + ' not in SQLDictionary or Table not in DataBase'

end



FETCH next FROM loopTrough INTO @TABID, @nextval

END

close loopTrough

DEALLOCATE loopTrough

print '** Finish **'

Popular posts from this blog

Dynamics Axapta: Sales Orders & Business Connector

Well, again folllowing my same idea of writting close to nothing and pasting code, I'll paste in some code to create a sales order from some basic data and the invoice it. I'll try to explain more in the future. AxaptaObject axSalesTable = ax.CreateAxaptaObject("AxSalesTable"); AxaptaRecord rcInventDim = ax.CreateAxaptaRecord("InventDim"); AxaptaRecord rcCustTable = ax.CreateAxaptaRecord("CustTable"); rcCustTable.ExecuteStmt("select * from %1 where %1.AccountNum == '" + MySalesOrderObject.CustAccount + "'"); if (MySalesOrderObject.CurrencyCode.Trim().Length == 0) MySalesOrderObject.CurrencyCode = rcCustTable.get_Field("Currency").ToString().Trim(); string sTaxGroup = rcCustTable.get_Field("taxgroup").ToString().Trim(); //set header level fields axSalesTable.Call("parmSalesName", MySalesOrderObject.SalesName.Trim()); axSalesTable.Call("parmCustAccount", M

Passing values between form and class

Class name is EmplDuplication and Form is EmplTable . void clicked() {    MenuFunction mf;    args args = new Args();    ;     args.record(EmplTable);     mf = new menufunction(identifierstr(EmplDuplication), MenuItemType::Action); mf.run(args); } Meanwhile, in the main() method of the EmplDuplication class, we need to put this Axapta x++ code to get the datasource: static void main(Args args) {     EmplDuplication EmplDuplication; EmplTable localEmplTable; ;     if(args.record().TableId == tablenum(EmplTable)) localEmplTable = args.record();     ... }