Question

Stored Procedure works only in QA

Asked by: paulomiranda

Hi,

I have this SP in MS SQL which does an INSERT...SELECT. I invoke it from a Delphi program.
When there's more then 25 records to insert in table it doesn't work at all.
Curiously, when I execute it from Query Analyzer everything works fine (with any amount of records).
Do you have any clues about what to do to get it working in Delphi?
Thanks in advance.

Regards.

Paulo

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2006-04-17 at 09:01:25ID21816347
Tags

delphi

,

procedure

,

stored

,

from

,

select

Topic

Delphi Programming

Participating Experts
6
Points
0
Comments
18

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. access violation while debugging stored procedures in quer…
    I got the following message when I tried to debug a stored procedure in query analyzer: ODBC: Msg 0, Level 19, State 1 [Microsoft][ODBC SQL Server Driver][SQL Server]SqlDumpExceptionHandler: Process 7 generated fatal exception c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server ...
  2. Executing a Stored Procedure in the SQL Query Analyzer
    To test a stored procedure, what modifications do I need to make to the following stored procedure to run it in the SQL Query Analyzer ? For instance, if I remove the 1st line, CREATE PROCEDURE dbo.procFlACS, I'll get the message: Must declare the variable '@RptYear' C...
  3. cfstoredproc fails yet SP runs in QA
    ok I'm stumped... I've got a SP I found which I've modified slightly that dynamically creates a pseudo-crosstab The Procedure is ------------------------------------------------------------ CREATE PROCEDURE crosstab @select varchar(8000), @sumfunc varchar(100), @pivot v...
  4. Stored Procedure Hangs but Query Analyzer Flies
    This has stumped my boss and I all day today. My stored procedure is almost 700 lines so I'm not going to post the whole thing here. What I'm going to post are the main chunks of code that I'm executing throughout. Everything runs very smooth, and very quick, until I hit o...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: EddieShipmanPosted on 2006-04-17 at 09:05:35ID: 16470081

could it be a timing issue?

 

by: kretzschmarPosted on 2006-04-17 at 09:42:09ID: 16470394

maybe you could show, how you do this?
did you get any exception?

meikl ;-)

 

by: BlackTigerXPosted on 2006-04-17 at 11:42:12ID: 16471343

are you using transactions?

what do you mean it doesn't work at all?
do you get an exception?

 

by: paulomirandaPosted on 2006-04-17 at 14:32:52ID: 16472847

First of all, I wanna thank you for the answers.
No, I don't get any exceptions, nor I'm using any transactions. Sometimes, it simply doesn't do the job.
The fragment I think isn't working is:

INSERT INTO ITEMMOVIMENTO (IDMovimento, idArtigo, idModelo, dscItemMov, qtdItemMov,
                                            valItemMov, descItemMov, CodAliqICMS,aliqIPI,
                                            valIPI, flgOrigemDest, LocOrigDest, flgOrigem, cstItemMov,
                                            flgPropTerc, pesoTotal, precoGrama, codNCM, idProduto,
                                            CodProduto)
      SELECT @IDMovimento,idArtigo, idModelo, dscItemMov, qtdItemMov, valItemMov,
                 descItemMov, CodAliqICMS,aliqIPI, valIPI, flgOrigDest, LocOrigDest, flgOrigem,
                 cstItemMov, flgPropTerc, pesoTotal, precoGrama, codNCM, idProduto, CodProduto
        FROM ITEMMOVTEMP WHERE IDMov = @IDMov

When table ITEMMOVTEMP has less than 20, 25 records everything works fine.

Once again, I'd like to thank you.

Regards,

Paulo

 

by: paulomirandaPosted on 2006-04-17 at 15:09:31ID: 16473257

Yes, Eddie.
I think it could be a timing issue.
It seems to be.
But I dont know how to deal with it.

 

by: BlackTigerXPosted on 2006-04-17 at 19:15:40ID: 16474392

can you post the full stored procedure?

and if you can, the code that you use to call this procedure (are you calling it from more than one place?)

 

by: pcsentinelPosted on 2006-04-18 at 01:20:02ID: 16476006

Agree, could be a timing issue, try 2 things

first make sure you have an index on IDMov in the ITEMMOVTEMP table

In Query Analyzer go to tools>options bring up the connections tab and try putting in a query time out value and then reconnecting and rerunning the query, what happens?

 

by: paulomirandaPosted on 2006-04-18 at 05:50:27ID: 16477303

The full SP looks like this:

CREATE PROCEDURE DBS01.SPBAIXA
@IDMov       Int,
@IdMovimento Int,
@Msg  VarChar(50) OutPut
As
  DECLARE
    @IDProduto  Int,
    @QtdSaidas Decimal(6,2),
    @QtdEntradas Decimal(6,2),
    @Saldo Decimal(6,2),
    @Qtd Decimal(6,2),
    @Mensagem varchar(60),
    @TipoProduto Char(1),
    @IDArtigo Int,
    @Destino Char(1),
    @IDOperacao Char(2),
    @CodProduto Int,
    @QtdSaidasPAux Decimal(6,2),
    @IDDestino Int,
    @IDMovimento Int,
    @Flg_NF Char(1),
    @Flg_Status Char(1),
    @NumDoc Int,
    @FlgFiscal Char(1),
    @TipoDoc Char(3),
    @IDLoja Int,
    @NumSeq Int,
    @dtMov DateTime,
    @ValTotal Decimal(10,2),
    @ValDescto Decimal(10,2),
    @PercDescto Decimal(5,3),
    @ValorItem Decimal(10,2),
    @ValDescItem Decimal(10,2),
    @SaldoDescto Decimal(10,2),
    @CodProd Int

    SELECT @IDOperacao = IDOperacao,
                @IDDestino = IDDestino,
                @TipoDoc = CodTipoDoc,
                @IDLoja = idLoja,
                @dtMov = dtMov,
                @NumDoc = numDocto,
                @ValTotal = ValTotal,
                @ValDescto = ValDescto  
        FROM MovTemp Where IDMov = @IDMov

    SELECT @PercDescto = 0
    SELECT @SaldoDescto = 0

    IF @ValDescto > 0
    BEGIN
        SELECT @PercDescto = @ValDescto / @ValTotal
        SELECT @SaldoDescto = @ValDescto
    END

    SELECT @Destino = Destino
        FROM Operacao
      WHERE IdOperacao = @IDoperacao


    INSERT INTO ITEMMOVIMENTO (IDMovimento, idArtigo, idModelo, dscItemMov,
                      qtdItemMov, valItemMov, descItemMov, CodAliqICMS,aliqIPI,
                      valIPI, flgOrigemDest, LocOrigDest, flgOrigem, cstItemMov, flgPropTerc,
                      pesoTotal, precoGrama, codNCM, idProduto, CodProduto)
      SELECT @IDMovimento,idArtigo, idModelo, dscItemMov, qtdItemMov, valItemMov,
                  descItemMov, CodAliqICMS,aliqIPI, valIPI, flgOrigDest, LocOrigDest, flgOrigem,
                  cstItemMov, flgPropTerc, pesoTotal, precoGrama, codNCM, idProduto, CodProduto
        FROM ITEMMOVTEMP
        WHERE IDMov = @IDMov

   
    DECLARE CURITEMMOV1 CURSOR
      FOR SELECT IDProduto, CodProduto, QtdItemMov, ValItemMov, IDArtigo
              FROM ItemMovTemp
            Where IDMov = @IDMov

    OPEN CURITEMMOV1

    FETCH NEXT FROM CURITEMMOV1
        INTO @IDProduto,  @CodProduto, @Qtd, @ValorItem, @IDArtigo

    WHILE (@@FETCH_STATUS = 0)
    BEGIN

       IF @ValDescto > 0
       BEGIN
           SELECT @ValDescItem = @ValorItem * @PercDescto
           IF @ValDescItem - @SaldoDescto >= 0
               SELECT @ValDescItem = @SaldoDescto
           ELSE
               IF @SaldoDescto - @ValDescItem < 5
               BEGIN
                  SELECT @ValDescItem = @SaldoDescto
               END
           SELECT @SaldoDescto = @SaldoDescto - @ValDescItem
       END

       IF NOT @CodProduto  IS NULL
          BEGIN
               UPDATE ItemMovimento SET descItemMov = @ValDescItem
                   WHERE IdMovimento = @IDMovimento AND
                                 CodProduto = @CodProduto
               SELECT @Saldo = qtdSaidas,
                           @QtdEntradas = QtdEntradas,
                           @Flg_NF = Flg_NF,
                           @Flg_Status = Flg_Status,
                           @IDProduto = idProduto
                   FROM ProdutoAux
                   WHERE CodProduto = @CodProduto
               IF @Saldo is NULL   SELECT @Saldo = 0
               IF @Flg_Status <> 'S'
               BEGIN
                 SELECT @Saldo = @Saldo + @Qtd
               END
          END
      ELSE
         BEGIN
              SELECT @Saldo = qtdSaidas,
                         @QtdEntradas = QtdEntradas
                  FROM Produto
                  WHERE IDProduto = @IDProduto
              IF @Saldo is NULL  SELECT @Saldo = 0
              SELECT @Saldo = @Saldo + @Qtd
         END
           
      SELECT @TipoProduto = FlgTipo From TipoProduto Where IDArtigo = @IDArtigo
                       
      IF @TipoProduto = 'J'
         BEGIN      
           SELECT @NumSeq = NULL
           SELECT @NumSeq = NumSequencial FROM ProdutoAux
                   WHERE codProduto = @CodProduto
           IF NOT @NumSeq IS NULL
           BEGIN
                SELECT @CodProd = CodProduto FROM Estoque
                        WHERE IdLoja = @IdLoja AND NumSequencial = @NumSeq
                IF @CodProd = @CodProduto
                    UPDATE Estoque
                       SET dtSaida = @dtMov,
                              saldo = 0,
                              IDMovSaida = @IDMovimento
                     WHERE idLoja = @IDLoja AND
                              NumSequencial = @NumSeq
           END
           IF @Destino = 'C'  
           BEGIN                
             UPDATE  ProdutoAux
                 SET QtdSaidas  = @Saldo,
                        Flg_Status = 'V',
                        numnfv     = @NumDoc
               WHERE CodProduto = @CodProduto
           END    
           ELSE  
           BEGIN                
             UPDATE ProdutoAux
                 SET QtdSaidas  = 1,
                       Flg_Status = 'O'                              
               WHERE CodProduto = @CodProduto
           END    
           SELECT @QtdSaidas = QtdSaidas FROM Produto Where IDProduto = @IDProduto
           IF @QtdSaidas is Null
               SELECT @QtdSaidas = 0
           UPDATE PRODUTO
               SET QtdSaidas = @QtdSaidas + 1
             WHERE IDProduto = @IDProduto
         END
       ELSE
         BEGIN
           IF @Destino = 'C'  
           BEGIN
             UPDATE  Produto
                   SET QtdSaidas = @Saldo
               WHERE IDProduto = @IDProduto                          
           END    
           ELSE
           BEGIN
             UPDATE  Produto
                   SET QtdSaidas = @Saldo
               WHERE IDProduto = @IDProduto          
           END    
           IF @Saldo = @QtdEntradas
           BEGIN
             UPDATE  Produto
                 SET FlgStatus     = 'O'                              
               WHERE IDProduto = @IDProduto
           END

         END

       FETCH NEXT FROM CURITEMMOV1
        INTO @IDProduto,  @CodProduto, @Qtd, @ValorItem, @IDArtigo
    END

       
    CLOSE CURITEMMOV1
    DEALLOCATE CURITEMMOV1
GO



I call it from Delphi using:

  Try
    With SPItemMovimento do
    begin
      ParamByName('@IDMov').asInteger := IDMov;
      If EdtNumDoc.Text <> '' then
        ParamByName('@NumDoc').asInteger := StrToInt(EdtNumDoc.Text)
      else
        ParamByName('@NumDoc').Clear;
      ParamByName('@codTipoDoc').asString := CBTipoDoc.keyvalue;
      ParamByname('@IDOperacao').asString := CbOper.KeyValue;
      ParamByName('@IDMovimento').AsInteger := IDMovimento;
      Prepare;
      if not Prepared then
        begin
          ShowMessage('Erro preparando SP. Avise suporte.');
          Exit;
        end;
      ExecProc;
    end;
  except
    on E: Exception do
      ShowMessage('Erro gravando itens do movimento. Avise suporte!');
  end;


SPITEMMOV will call SPBaixa depending on @IDOPERACAO. This ever works.

Thank you all for the interest. I'm very glad.

 

by: paulomirandaPosted on 2006-04-18 at 06:52:46ID: 16477921

Pcsentinel,

No, I dont have an index on IDMOV in the table. Do I have to?

I tried to reproduce the problem, but I couldn't. Now, its accepting more then 30 records.
Anyways, I think nothing will happen changing query time out in QA, 'cause it allways worked fine when executed througth it.
I'll try adding more records.

Thanks

 

by: pcsentinelPosted on 2006-04-18 at 07:48:31ID: 16478446

Yes add the index it will make the procedure return the records much quicker

 

by: pcsentinelPosted on 2006-06-22 at 00:31:44ID: 16957690

Why refund the points?

 

by: cwwkiePosted on 2006-06-22 at 10:08:50ID: 16961940

> Why refund the points?

I think the Asker has responded to all of the Experts' suggestions. Or did I miss something?

 

by: pcsentinelPosted on 2006-06-23 at 01:04:37ID: 16966939

Because I think the answers did answer the question, or at least point to an answer and the asker has just abandoned it

 

by: cwwkiePosted on 2006-06-23 at 10:24:30ID: 16971062

> Because I think the answers did answer the question,

Ok, I change my recommendation, and asume the following answer to this question:
        There is a timing issue which occurs because there is no index on IDMov in the ITEMMOVTEMP table

 

by: paulomirandaPosted on 2006-06-23 at 17:06:03ID: 16973467

I am sorry to say that this miserable issue is not solved yet.
My customer found a way to live with it, and, from time to time, checks if I have an answer to him. This is boring. He laughs at me every time we meet.
Anyways, I'd like to thank you all for your interest on helping me. I think this has more to do with black magic or something.
I'm thinking about asking Chuck Norris for help. Maybe he's the only one who can finally make it work.
Thanx again.
Regards.,

Paulo

 

by: GranModPosted on 2006-06-25 at 01:55:42ID: 16978008

PAQed with points refunded (125)

GranMod
Community Support Moderator

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...